【问题标题】:Compute all outer products at once [duplicate]一次计算所有外部产品[重复]
【发布时间】:2018-02-17 04:46:54
【问题描述】:

给定一个形状为(n, k1) 的数组a 和一个形状为(n, k2) 的数组b,我想计算a[i]b[i] 的所有外积。这

import numpy

n = 3

a = numpy.random.rand(n, 7)
b = numpy.random.rand(n, 11)

out = numpy.array([
    numpy.outer(a[i], b[i]) for i in range(n)
    ])

print(out.shape)  # (n, 7, 11)

可以解决问题,但它包含一个 Python 循环,可以减慢大型 n 的速度。

可以一次计算外积吗?

【问题讨论】:

  • 哪种算法不用计算n次就可以计算出来?与其寻找另一种算法,我认为创建一个固定大小的numpy.array,然后使用多个处理来加速计算是一个更好的解决方案。例如,用numexpr 计算numpy.outer

标签: python arrays numpy


【解决方案1】:
np.einsum('ij,ik->ijk', a, b)

或者,使用广播,

a[:,:,np.newaxis] * b[:,np.newaxis,:]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多