numpy拆分数组为分组后调用count方法统计次数报错解决
报错原因
Python原生列表的count()方法依赖==运算符判断元素是否相等。通过np.split拆分得到的列表元素均为numpy数组,两个numpy数组执行==运算时,返回的是逐位置元素对比生成的布尔数组,而非单个布尔值。Python无法将多元素的布尔数组解析为真/假判断条件,因此抛出真值歧义错误。
解决方法
方案1:拆分后转为Python原生类型,直接使用count统计
numpy数组无法直接适配原生列表的相等判断逻辑,你可以在拆分后将每个子数组转为元组(或普通列表),即可正常使用count方法,也支持直接用Counter批量统计所有分组的出现次数:
import numpy as np from collections import Counter _3_hop_middle_cells = ['E', 'D', 'E', 'D', 'D', 'C', 'C', 'D', 'D', 'E', 'D', 'C'] _3_hop_middle_cells = np.array(_3_hop_middle_cells) # 拆分后将每个numpy子数组转为元组 _3_hop_middle_cells = [tuple(group) for group in np.split(_3_hop_middle_cells, len(_3_hop_middle_cells)//2)] # 统计第0个分组的出现次数 first_group_count = _3_hop_middle_cells.count(_3_hop_middle_cells[0]) print(first_group_count) # 输出:1 # 批量统计所有分组出现次数 all_group_count = Counter(_3_hop_middle_cells) print(all_group_count) # 输出:Counter({('D', 'C'): 2, ('E', 'D'): 1, ('C', 'D'): 1, ('D', 'E'): 1})
注意:传入np.split的拆分份数必须是整数,建议用整数除法//代替普通除法/,避免浮点数参数触发报错。
方案2:保留numpy数组结构,用numpy方法统计
如果不需要转为Python原生类型,可以借助np.array_equal做数组整体相等判断,再累加匹配的数量:
import numpy as np _3_hop_middle_cells = ['E', 'D', 'E', 'D', 'D', 'C', 'C', 'D', 'D', 'E', 'D', 'C'] _3_hop_middle_cells = np.array(_3_hop_middle_cells) _3_hop_middle_cells = list(np.split(_3_hop_middle_cells, len(_3_hop_middle_cells)//2)) target_group = _3_hop_middle_cells[0] count = 0 for group in _3_hop_middle_cells: if np.array_equal(group, target_group): count +=1 print(count) # 输出:1
内容的提问来源于stack exchange,提问作者Bahadır Yalın
相关产品推荐
相关产品推荐

