能否用nditer遍历numpy数组中的列表元素而非列表内元素?
解决numpy nditer遍历二维数组行的问题
首先纠正你的数组定义语法错误,正确的初始化代码应该是:
import numpy as np myArray = np.array([['A','B'],['A','C'],['B','C']])
要实现用nditer直接遍历数组的每一行(而非单个元素),可以通过以下两种方法实现:
方法1:利用external_loop和转置迭代
通过转置数组并设置external_loop标志,让nditer返回整行数据:
with np.nditer(myArray.T, flags=['external_loop'], order='F') as it: for row in it: print(row.tolist())
输出结果:
['A', 'B'] ['A', 'C'] ['B', 'C']
原理说明
myArray.T将原数组转置,把行结构转为列结构flags=['external_loop']让迭代器返回整个维度的元素集合,而非单个值order='F'指定按列优先(Fortran顺序)迭代,对应原数组的行数据
方法2:转换为object类型数组
将原数组转换为元素为行列表的object类型一维数组,再用nditer遍历:
# 转换为object类型数组,每个元素对应原数组的一行 obj_array = np.array(myArray.tolist(), dtype=object) with np.nditer(obj_array, flags=['refs_ok']) as it: for item in it: # 使用item()获取原始列表对象 print(item.item())
输出结果与方法1一致。
原代码无效的原因
- 你设置的
flags=['tried a view']是无效标志,nditer不支持该选项 op_dtypes=list不符合要求,nditer的op_dtypes参数需要指定numpy支持的数据类型,而非Python原生list类型
内容的提问来源于stack exchange,提问作者TheArmbreaker
相关产品推荐
相关产品推荐

