Python Numpy阵列访问优化

Python Numpy阵列访问优化,python,arrays,performance,numpy,Python,Arrays,Performance,Numpy,因此,我有一个超过1000万个元素甚至更多的大型numpy数组 然后我有一个循环,它访问大数组 在每次迭代中,循环都会遍历相邻索引的列表,从numpy数组中检索值。 目前,我从大数组中获取一个片段,然后检索值 例如: 循环需要访问[1000,1000],[10011009] 它将获取数组的切片[1000:1003991:1001],然后访问元素 这是降低了循环的性能,还是在理论上提高了循环的性能?根据我的记忆,切片是将列表部分复制到内存中。我不确定,但我几乎可以肯定这次行动是O1。但是直接触控,

因此,我有一个超过1000万个元素甚至更多的大型numpy数组 然后我有一个循环,它访问大数组

在每次迭代中,循环都会遍历相邻索引的列表,从numpy数组中检索值。 目前,我从大数组中获取一个片段,然后检索值

例如: 循环需要访问[1000,1000],[10011009] 它将获取数组的切片[1000:1003991:1001],然后访问元素


这是降低了循环的性能,还是在理论上提高了循环的性能?

根据我的记忆,切片是将列表部分复制到内存中。我不确定,但我几乎可以肯定这次行动是O1。但是直接触控,比如

容器=[] 对于A区的i,b区: 容器.附录[i]

它通常更快。

arr1=arr[1000:1003991:1001]是arr的视图。这意味着它是一个新的数组对象,具有自己的形状和步幅,但它与arr共享数据缓冲区。我可以详细了解它如何“共享”,但我认为这在这里并不重要

arr[1000,1000]、arr[1001,1000]、arr[1002999]是arr的单个元素。如果我计算正确,arr1[0,1]、arr1[1,1]、arr1[2,0]引用相同的元素。我的猜测是,访问时间将是相同的

这三个元素可以一次提取,一份拷贝,一份拷贝

arr2 = arr[[1000, 1001, 1002],[1000, 1000, 999]]
我想

for x in arr:
   <do something with x>
将比

for idx in [[1000, 1000], [1001, 1000], [1002,999]]:
    x = arr[idx]
    <do something with x>
但“做点什么”的时间可能会超过索引时间


但是我鼓励您设置一个测试用例,并尝试其他选择。你自己看看有什么不同。

是否有什么东西阻止你自己检查它,这样你就不必担心理论,而可以满足于现实?这可能是一个好问题,需要更多的信息/研究