如何解决将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 举报,一经查实,本站将立刻删除。