在numpy的快速外张量积在numpy的快速外张量积(Fast outer tensor produ

2019-05-12 10:26发布

我有两个numpy的数组:

x of shape ((d1,...,d_m)) 
y of shape ((e_1,...e_n)) 

我想形成外张量积,即numpy的阵列

z of shape ((d1,...,d_m,e_1,...,e_n))

这样

z[i_1,...,i_n,i_{n+1}...,i_{m+n}] == x[i_1,...i_m]*y[i_{m+1},...,i_{m+n}]

我不得不执行上述外乘几次,所以我想加快这尽可能多地。

Answer 1:

一个替代outer是显式扩大的尺寸。 对于一维数组,这将是

x[:,None]*y   # y[None,:] is automatic.

对于10×10阵列,以及推广维度扩展,我会得到相同的时间

In [74]: timeit x[[slice(None)]*x.ndim + [None]*y.ndim] * y
10000 loops, best of 3: 53.6 µs per loop

In [75]: timeit np.multiply.outer(x,y)
10000 loops, best of 3: 52.6 µs per loop

所以outer确实保存一些编码,但基本广播乘法是相同的。



Answer 2:

你想np.multiply.outer

z = np.multiply.outer(x, y)


文章来源: Fast outer tensor product in numpy