我有2个2d numpy数组,A的形状为(i,j),B的形状为(i,k),其中j >> k。我想定义一个新的3d数组C,使C中的每个元素都是A中每一列与整个矩阵B的广播元素明智乘积。换句话说,作为普通的python循环,我会这样做
for x in range(j):
C[x] = A[:,x]*B
但是在这种情况下j非常大,如果我能够使用Numpy的功能像上面的循环中那样逐个元素地定义ndarray C,它将对我有很多好处。
谢谢您的帮助
答案 0 :(得分:1)
您可以像这样使用广播:
a.T[:, :, None] * b
示例:
import numpy as np
np.random.seed(444)
i, j, k = 2, 10, 3
a = np.random.randn(i, j)
b = np.random.randn(i, k)
c = a.T[:, :, None] * b
print(c.shape)
# (10, 2, 3)
转置源于您要对a
中的每一列进行内部操作的事实,并且[:, :, None]
扩展了维度以启用广播,如NumPy的broadcasting rules中所述。