是否可以在 numpy 中对这个计算进行矢量化?

Posted

技术标签:

【中文标题】是否可以在 numpy 中对这个计算进行矢量化?【英文标题】:Is it possible to vectorize this calculation in numpy? 【发布时间】:2019-03-12 14:01:09 【问题描述】:

numpy 数组的以下表达式可以向量化以加快速度吗?

k_lin1x = [2*k_lin[i]*k_lin[i+1]/(k_lin[i]+k_lin[i+1]) for i in range(len(k_lin)-1)]

是否可以在 numpy 中将此计算向量化?

【问题讨论】:

【参考方案1】:
x1 = k_lin
x2 = k_lin
s = len(k_lin)-1

np.roll(x2, -1) #do this do bring the column one position right

result1 = x2[:s]+x1[:s] #your divider. You add everything but the last element
result2 = x2[:s]*x1[:s] #your upper part

# in one line
result = 2*x2[:s]*x1[:s] / (x2[:s]+x1[:s])

您的最后一列不会被添加或纳入计算,您只需使用 np.roll 移动列即可。 x2[0] = x1[1], x2[1] = x1[2]。

这只是一个关于如何处理 google numpy roll 的演示。此外,您可以简单地删除最后一列,而不是在 x2 上使用 s,因为它对计算没有用处。

【讨论】:

以上是关于是否可以在 numpy 中对这个计算进行矢量化?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Numpy 矢量化广播操作期间访问当前索引?

Numpy基础:数组和矢量计算

python numpy基础 数组和矢量计算

《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

利用Python进行数据分析——Numpy基础:数组和矢量计算

我如何在熊猫中对这个操作进行矢量化?