想要在numpy elementwise中定义一个ndarray

时间:2018-07-09 14:36:31

标签: python numpy

我有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 个答案:

答案 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中所述。