Performance numpy索引访问与numpy.array.item性能
我已经使用numpy有一段时间了,并使用Performance numpy索引访问与numpy.array.item性能,performance,Performance,我已经使用numpy有一段时间了,并使用index操作访问数组,就像python列表一样,如下所示: img=np.零((640480,3)) img[34,19,2] 然而,在阅读某本书时,我遇到了一些问题和方法。 根据他们的文档,他们提供了性能改进。但是,至少在文档中已经解释了为什么会发生这种情况。 有人知道它的原因吗;DR:速度的差异来自于项所使用的不同类型,/项集以及[]运算符更通用的事实。实际上,两者都使用内置的Python解释器float类型,而img[34,19,2]返回Pyth
index
操作访问数组,就像python列表一样,如下所示:
img=np.零((640480,3))
img[34,19,2]
然而,在阅读某本书时,我遇到了一些问题和方法。根据他们的文档,他们提供了性能改进。但是,至少在文档中已经解释了为什么会发生这种情况。
有人知道它的原因吗;DR:速度的差异来自于
项所使用的不同类型,/项集
以及[]
运算符更通用的事实。实际上,两者都使用内置的Python解释器float
类型,而img[34,19,2]
返回Python对象np.float64
。此外,[]
操作符不仅支持直接索引,还支持数组子视图和数组过滤,项
/项集
不支持
要完全理解性能差异的原因,应该查看numpy代码item
和itemset
方法分别调用和。或者,直接获取和设置数组元素分别调用和
最后两种方法成本稍高,因为它们更通用。事实上,通过查看array\u toscalar
和array\u subscript
之间的差异,可以看出前者执行的计算很少,主要调用哪些调用,而后者执行更多的检查和分配,主要调用那些本身执行间接跳转的调用,以最终生成np.float64
对象
请注意,尽管item
和itemset
可以比[]
操作符更快,但CPython中的numpy直接索引仍然非常慢。Numba可以通过执行本机直接索引大大加快速度。感谢您的解释。没有注意到索引中不那么通用的方法吗