我有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元素,它将对我有很多好处。
1 回答

倚天杖
TA贡献1828条经验 获得超3个赞
您可以像这样使用广播:
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的广播规则中所述。
添加回答
举报
0/150
提交
取消