将二维 numpy 数组与二维 numpy 数组的每一行相乘(不使用 for 循环)

Multiplying a 2D numpy array with every row of a 2D numpy array (Without using for loop)

我有两个二维 numpy 数组,如下所示

Matrix_A 是形状为 (3,3) 的二维数组 Matrix_B 是形状为 (9,3)

的二维数组
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]。 请记住,乘法矩阵时,乘法的顺序很重要。

本质上这等同于 (Matrix A* (Matrix B )^T)^T(^T 表示矩阵的转置)。在 numpy 代码中,假设矩阵是 numpy 数组

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