Python Numpy-多个外部产品

Python Numpy-多个外部产品,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我想知道是否有一种方法可以计算多个外积并将结果叠加到一个操作中 假设我有一个Nx1向量,取外积和一个1xM向量,结果将是一个NxM矩阵 如果我有一个NxR矩阵A和一个RxM矩阵B会怎么样?是否可以构造一个NxMxR矩阵,其中输出矩阵的每一层都是A的相应列和B的行的外积 我知道在单for-loop-over R中实现这一点非常容易,但我想知道是否有一种更快的方法使用numpy内置项(当涉及numpy时通常是这样) 我还没能找出一组使用einsum的索引(我甚至不确定einsum是否是正确的方法,因

我想知道是否有一种方法可以计算多个外积并将结果叠加到一个操作中

假设我有一个Nx1向量,取外积和一个1xM向量,结果将是一个NxM矩阵

如果我有一个NxR矩阵A和一个RxM矩阵B会怎么样?是否可以构造一个NxMxR矩阵,其中输出矩阵的每一层都是A的相应列和B的行的外积

我知道在单for-loop-over R中实现这一点非常容易,但我想知道是否有一种更快的方法使用numpy内置项(当涉及numpy时通常是这样)

我还没能找出一组使用einsum的索引(我甚至不确定einsum是否是正确的方法,因为这里没有求和)

是的,当然,使用或einsum(没有求和的事实无关紧要)


你能解释一下广播是如何工作的吗?实际上是为了增加一个空轴而改变阵列的形状吗?是的,就是这样。我在NumPy文档中添加了一个关于广播的链接。啊,我明白了,我没有把这种元素乘法广播与外积的等价性联系起来。谢谢Hi Nils,我正在尝试取两个矩阵A,B,都有R行和N列。我想将每一行的外积与另一行的外积形成,即A_j outer B_j for j=1,…,R。我有数学背景,你的编码让我很困惑。你能描述一下einsum是如何完成这项任务的吗?@jamesmartini请提出一个新问题
N, M, R = 8, 9, 16

A = numpy.random.rand(N)
B = numpy.random.rand(M)

C = A[:, None] * B[None, :]
D = numpy.einsum('a,b->ab', A, B)
numpy.allclose(C, D)
# True
C.shape
# (8, 9)

A = numpy.random.rand(N, R)
B = numpy.random.rand(M, R)

C = A[:, None, :] * B[None, :, :]
D = numpy.einsum('ar,br->abr', A, B)
numpy.allclose(C, D)
# True
C.shape
# (8, 9, 16)