outer method的NumPy ufuncs以你想要的方式处理多维输入,所以你可以做到
numpy.multiply.outer(a,b)
而不是使用numpy.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,)