Python Numpy数组索引过滤遇numpy.int64不可迭代问题处理
错误原因
- 报错
TypeError: 'numpy.int64' object is not iterable的核心是错误使用了列表的extend()方法:extend()要求传入可迭代对象(如列表、数组等),但代码中v = equals[count]取到的是单个numpy.int64类型的数值,不属于可迭代对象,因此触发类型错误。
修复方案
只需要把函数中store_sets.extend(v)修改为store_sets.append(v)即可:append()方法的作用就是往列表中添加单个元素,完全符合当前场景的需求。
修改后的完整函数代码如下:
def differences(filter_vals, store_sets): for count, (d,y) in enumerate(zip(all_data,filter_vals)): if d == y: v = equals[count] store_sets.append(v) print(store_sets)
更简洁的numpy向量化实现(可选)
如果不想写循环,可以直接用numpy的布尔掩码实现同样的效果,代码更短执行效率也更高:
set1 = equals[all_data == filtered_set].tolist() set2 = equals[all_data == filtered_set2].tolist()
运行后得到的结果和预期完全一致。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

