问题描述
我有两个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