numpy.outer 没有展平

计算科学 线性代数 矩阵 麻木的
2021-11-28 02:55:00

x是一个N×M矩阵。

y是一个1×L向量。

我想退回“外部产品”之间xy,我们称之为z.

z[n,m,l] = x[n,m] * y[l]

我可能可以使用einsum.

np.einsum("ij,k->ijk", x[:, :, k], y[:, k])

reshape之后。

 np.outer(x[:, :, k], y).reshape((x.shape[0],x.shape[1],y.shape[0]))

但我正在考虑np.outer只这样做,或者看起来更简单,内存效率更高。

有办法吗?

1个回答

我认为numpy.tensordot 可以满足您的需求。

import numpy as np

N=2
M=3
L=4

x=np.arange(N*M).reshape(N,M)
y=np.arange(L)
z=np.tensordot(x,y,axes=0)

print('x=',x)
print('y=',y)
print('z=',z)

x= [[0 1 2]
 [3 4 5]]
y= [0 1 2 3]
z= [[[ 0  0  0  0]
  [ 0  1  2  3]
  [ 0  2  4  6]]

 [[ 0  3  6  9]
  [ 0  4  8 12]
  [ 0  5 10 15]]]