微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将2D numpy数组与2D numpy数组的每一行相乘不使用for循环

如何解决将2D numpy数组与2D numpy数组的每一行相乘不使用for循环

我有两个2D numpy数组,如下所示

Matrix_A是形状为(3,3)的2D数组 Matrix_B是shape(9,3)的2D数组

Matrix A = [[ 0. -1.  0.]
            [ 1.  0.  0.]
            [ 0.  0.  1.]]


Matrix_B = [[0.5 0.5 0.5]
            [1.5 0.5 0.5]
            [2.5 0.5 0.5]
            [0.5 1.5 0.5]
            [1.5 1.5 0.5]
            [2.5 1.5 0.5]
            [0.5 2.5 0.5]
            [1.5 2.5 0.5]
            [2.5 2.5 0.5]]

Matrix_C = Matrix multiply A and B (preferably numpy dot)  # Need the shape of the matrix to be (9,3)
print(Matrix_C)

对于上述情况,Matrix_C的答案将为

Matrix_C = [[-0.5  0.5  0.5]
            [-0.5  1.5  0.5]
            [-0.5  2.5  0.5]
            [-1.5  0.5  0.5]
            [-1.5  1.5  0.5]
            [-1.5  2.5  0.5]
            [-2.5  0.5  0.5]
            [-2.5  1.5  0.5]
            [-2.5  2.5  0.5]]

上面的Matrix_C值是使用for循环获得的

Matrix_C = np.zeros_like(len(Matrix_B))

for i in range(len(Matrix_B)):
    Matrix_C[i] = np.dot(Matrix_A,Matrix_B[i])


print(Matrix_C)

我希望将Matrix_A与Matrix_B的每一行相乘。

不使用For循环。通过引入numpy newaxis和numpy广播方法,可以实现我使用for_loop获得的Matrix_C的值。

期待一些答复。

解决方法

让我们尝试一下代码:

Matrix_A = np.concatenate((Matrix_A,Matrix_A,Matrix_A),axis=0)
Matrix_C = Matrix_A * Matrix_B
,

好吧,所以从您添加的说明中开始,需要对MatrixB的每一行执行Matrix A * Matrix B [0],...,Matrix A * Matrix B [n]。 请记住,在将矩阵相乘时,相乘的顺序很重要。

从本质上讲,这等效于(矩阵A *(矩阵B)^ T)^ T(^ T表示矩阵的转置)。在numpy代码中,假设矩阵是numpy数组,就可以像这样完成

matrixC = MatrixA.dot(MatrixB.T).T

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。