NumPy的ufuncs對待多維輸入你想要的方式,所以你可以做
numpy.multiply.outer(a, b)
,而不是使用的outer
methodnumpy.outer
。
這裏建議的所有解決方案同樣快;對於小數組,multiply.outer
有輕微的邊緣
代碼生成圖像:
import numpy
import perfplot
def multiply_outer(data):
a, b = data
return numpy.multiply.outer(a, b)
def outer_reshape(data):
a, b = data
return numpy.outer(a, b).reshape((a.shape + b.shape))
def tensor_dot(data):
a, b = data
return numpy.tensordot(a, b, 0)
perfplot.show(
setup=lambda n: (numpy.random.rand(n, n), numpy.random.rand(n, n)),
kernels=[multiply_outer, outer_reshape, tensor_dot],
n_range=[2**k for k in range(7)],
logx=True,
logy=True,
)