Numpy - 两个矩阵的行间外积

Mar*_*eau 4 numpy python-2.7

我有两个numpy数组:A形状(b,i)和B形状(b,o).我想计算的阵列- [R形状(B,I,O),其中每一行的ř包含行的外积和行.到目前为止我所拥有的是:

import numpy as np

A = np.ones((10, 2))
B = np.ones((10, 6))
R = np.asarray([np.outer(a, b) for a, b in zip(A, B)])
assert R.shape == (10, 2, 6)
Run Code Online (Sandbox Code Playgroud)

我认为这个方法太慢了,因为zip和最终转换成numpy数组.

有更有效的方法吗?

kaz*_*ase 7

这是可能的numpy.matmul,这可以做"矩阵堆栈"的倍增.在这种情况下,我们希望将一堆列向量与一堆行向量相乘.首先将矩阵A带到形状(b,i,1),将B带到形状(b,1,o).然后使用matmul执行b次外部产品:

import numpy as np

i, b, o = 3, 4, 5

A = np.ones((b, i))
B = np.ones((b, o))

print(np.matmul(A[:, :, np.newaxis], B[:, np.newaxis, :]).shape)  # (4, 3, 5)
Run Code Online (Sandbox Code Playgroud)

可以使用替代方法numpy.einsum,它可以直接表示您的索引表示法:

np.einsum('bi,bo->bio', A, B)
Run Code Online (Sandbox Code Playgroud)


dse*_*uss 7

为什么不简单

A[:, :, None] * B[:, None, :]
Run Code Online (Sandbox Code Playgroud)

根据你的约定和你的 dtype,你可能需要在另一个np.conj地方扔进去。请注意,这np.newaxis只是None