脾气暴躁-多种外部产品

时间:2018-08-21 13:27:38

标签: python arrays numpy multidimensional-array

我想知道是否有一种方法可以计算多个外部乘积并将结果堆叠在一个操作中。

假设我有一个Nx1向量,并将外部乘积与1xM向量相乘,结果将是一个NxM矩阵。

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

我知道在R上的一个for循环中执行此操作确实很容易,但是我想知道是否有使用numpy内置函数的更快方法(通常在使用numpy的情况下)。

我无法找出一组适用于einsum的索引(而且我甚至不确定einsum是否是正确的方法,因为这里不涉及求和)

1 个答案:

答案 0 :(得分:1)

是的,当然可以使用Nim docs或Einsum(没有求和的事实并不重要)

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)