将二维 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
我有两个二维 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