如何对维度未知的numpy ndarray进行索引?
优化多维Numpy数组遍历的方案
你的代码冗余问题可以通过两种更优雅的方式解决,无需针对每个维度写嵌套循环:
方法一:使用itertools.product生成索引组合
利用笛卡尔积生成除第一维外所有维度的索引组合,适配任意维度数:
from itertools import product # 获取数组维度数 ndim = myarray.ndim # 生成ndim-1个维度的索引笛卡尔积(每个维度范围0-99) for indices in product(range(100), repeat=ndim-1): do_something(myarray[:, *indices])
这个方法和你原代码的逻辑完全对应,只是把嵌套循环替换成了笛卡尔积生成的迭代器,代码简洁且易读。
方法二:利用Numpy的reshape扁平化维度
更高效的Numpy原生方案,将除第一维外的所有维度合并为一个维度,直接遍历:
# 将数组重塑为(第一维长度,其余维度总元素数)的二维数组 flattened_array = myarray.reshape(myarray.shape[0], -1) # 遍历每一列(对应原数组的[:, p0, p1,...]) for col in flattened_array.T: do_something(col)
reshape操作是O(1)的(仅改变数组的视图,不复制数据),这种方式避免了Python层面的嵌套循环,在处理大数据量时效率远高于嵌套循环。
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

