一次性计算所有外积

3

给定一个形状为 (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 - Sraw
1个回答

2
np.einsum('ij,ik->ijk', a, b)

或者,使用广播

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接