计算numpy ndarrays序列的外部乘积

aph*_*aph 2 python performance numpy matrix scientific-computing

我有一个3D点p列表,存储在形状为(N,3)的ndarray中。我想自己计算每个3d点的外部乘积:

N = int(1e4)
p = np.random.random((N, 3))
result = np.zeros((N, 3, 3))
for i in range(N):
    result[i, :, :] = np.outer(p[i, :], p[i, :])
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以计算这种外部乘积而无需任何python级循环?问题是np.outer不支持任何axis参数。

Pau*_*zer 5

您可以使用广播:

p[..., None] * p[:, None, :]
Run Code Online (Sandbox Code Playgroud)

此语法在第一项的末尾(使之为Nx3x1)和第二项的中间(使之为Nx1x3)插入轴。然后将它们广播并产生Nx3x3的结果。