如何统计NumPy数组中各子数组的出现次数?
统计NumPy数组中每个子数组的出现次数
这个问题我之前也碰到过——因为NumPy的二维子数组是ndarray类型,属于不可哈希对象,直接用常规的计数工具(比如collections.Counter)会报错。这里给你两种实用的解法,都能得到你想要的输出格式:
方法一:转换为元组后用collections.Counter统计
先把每个子数组转换成可哈希的元组,再用Counter完成计数,最后格式化输出:
import numpy as np from collections import Counter # 定义你的数组 x = np.array([[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]) # 将每个子数组转为元组(元组是可哈希的) tuple_rows = [tuple(row) for row in x] # 统计每个元组的出现次数 counts = Counter(tuple_rows) # 格式化为你想要的输出样式 output_parts = [] for sub_arr, cnt in counts.items(): # 把元组转成方括号的格式 arr_str = f"[{', '.join(map(str, sub_arr))}]" output_parts.append(f"{arr_str} = {cnt}") final_output = f"count = {', '.join(output_parts)}" print(final_output)
运行后会输出:
count = [0, 1] = 2, [0, 2] = 2, [0, 3] = 1
方法二:用NumPy原生的np.unique函数
NumPy自带的unique函数支持指定axis参数来处理二维数组,直接返回唯一子数组和对应的计数:
import numpy as np # 定义你的数组 x = np.array([[0, 1], [0, 1], [0, 2], [0, 2], [0, 3]]) # 获取唯一子数组和对应的计数 unique_subarrays, counts = np.unique(x, axis=0, return_counts=True) # 格式化为目标输出 output_parts = [] for sub_arr, cnt in zip(unique_subarrays, counts): arr_str = f"[{', '.join(map(str, sub_arr))}]" output_parts.append(f"{arr_str} = {cnt}") final_output = f"count = {', '.join(output_parts)}" print(final_output)
这个方法不需要额外导入其他库,纯NumPy就能搞定,输出结果和方法一完全一致。
内容的提问来源于stack exchange,提问作者nvmnd
相关产品推荐
相关产品推荐

