python - 有效求和一维 NumPy 数组的外积

标签 python numpy optimization

我有一个如下形式的函数

enter image description here

在 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/

相关文章:

python - django 中的类别和子类别

python - 推荐一个 Django 项目在 Linux 上运行的地方

python - 为 panda 切片添加值的有效方法

python - Pandas 相当于方阵状数据帧上的 max(下三角形,上三角形)

c - 5个嵌套for循环,速度优化

java - Java 的 JIT 编译器 "expand"是否是微不足道的循环?

python - 缺少必需的位置参数(日期时间)

python - Django:有没有办法取消特定模型信号的接收器触发?

python - 将 numpy 值数组映射到图像的有效方法

c - boolean 值的轻量级矩阵