我有两个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}]
我必须多次执行上面的外部乘法,所以我想尽可能加快速度。
答案 0 :(得分:5)
z = np.multiply.outer(x, y)
答案 1 :(得分:2)
outer
的替代方法是明确扩展维度。对于1d阵列,这将是
x[:,None]*y # y[None,:] is automatic.
对于10x10阵列,并概括了维度扩展,我获得相同的时间
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
确实保存了一些编码,但基本的广播乘法是相同的。