Performance numpy索引访问与numpy.array.item性能

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

我已经使用numpy有一段时间了,并使用
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可以通过执行本机直接索引大大加快速度。

感谢您的解释。没有注意到索引中不那么通用的方法吗