鉴于两个numpy.arrays a和b,
c = numpy.outer(a,b)
返回二维数组,其中c [i,j] == a [i] * b [j].现在,想象一下有k个维度.
>哪个操作返回维数为k 1的数组c,其中c […,j] == a * b [j]?
另外,让b具有l维度.
>哪个操作返回维数为k 1的数组c,i1,i2,i3] == a * b [i1,i3]?
解决方法
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,)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。