任意阶数组索引的高效迭代

2024-03-28 14:11:38 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个任意的N阶可变数组。例如: A是一个2x3x3数组,它是一个三阶数组,沿它的三个索引有2、3和3个维数。你知道吗

我想有效地循环每个元素。如果我事先知道顺序,那么我就可以做一些类似的事情(在python中)

#for order 3 
import numpy as np
shape = np.shape(A)
i = 0
while i < shape[0]:
  j = 0
  while j < shape[1]:
    k = 0
    while k < shape[2]:
      #code using i,j,k
      k += 1
    j += 1
  i += 1

现在假设我不知道A的顺序,也就是说,我不知道shape的长度。如何在数组的所有元素中以最快的速度排列?你知道吗


Tags: importnumpy元素for顺序asnpcode
3条回答

我认为选择在第一个索引上排列哪个索引、在第二个索引上排列哪个索引等都无关紧要,因为最内部的while语句总是在ijk的每个组合中执行一次。你知道吗

如果您需要保留操作的结果(并假设它是a和i,j,k的函数),您可能希望使用以下内容:

import itertools
import numpy as np

results = ( (position, code(A,position))
              for indices in itertools.product(*(range(i) for i in np.shape(A))))

然后可以迭代结果,得到每个位置的位置并返回代码值。或者,如果需要多次访问结果,请将生成器表达式转换为列表。你知道吗

有很多方法可以做到这一点,例如迭代a.ravel()a.flat。但是,在Python循环中遍历数组的每个元素永远不会特别有效。你知道吗

相关问题 更多 >