我有一个如下形式的函数
在 numpy 中实现此函数的一种方法是组装一个矩阵进行求和:
y = a*b - np.sum(np.outer(a*b, b), axis=0)
是否有更好的方法来使用 numpy 实现此函数,并且不涉及创建 NxN 数组?
最佳答案
您可以使用np.einsum
-
y = a*b - np.einsum('i,i,j->j',a,b,b)
我们还可以执行a*b
并馈送到einsum
-
y = a*b - np.einsum('i,j->j',a*b,b)
在第二种方法中,我们可以通过存储 a*b
并重用来节省一些运行时间。
运行时测试 -
In [253]: a = np.random.rand(4000)
In [254]: b = np.random.rand(4000)
In [255]: %timeit np.sum(np.outer(a*b, b), axis=0)
10 loops, best of 3: 105 ms per loop
In [256]: %timeit np.einsum('i,i,j->j',a,b,b)
10 loops, best of 3: 24.2 ms per loop
In [257]: %timeit np.einsum('i,j->j',a*b,b)
10 loops, best of 3: 21.9 ms per loop
关于python - 有效求和一维 NumPy 数组的外积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40142004/