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,
)