Python实现numpy多维数组重复子数组去重及出现次数统计
解决方案
可以直接通过Python标准库的计数工具配合numpy遍历实现,不需要额外复杂依赖,完整代码如下:
import numpy as np from collections import Counter # 输入的多维数组列表 input_arrays = [ np.array([['Alpha', 100], ['Alpha', 100], ['Alpha', 200]], dtype=object), np.array([['Alpha', 'A1'], ['Alpha', 'A1'], ['Alpha', 'A2']], dtype=object), np.array([[100, 'A1'], [100, 'A1'], [200, 'A2']], dtype=object), np.array([['Alpha', 100, 'A1'], ['Alpha', 100, 'A1'], ['Alpha', 200, 'A2']], dtype=object) ] output_blocks = [] for arr in input_arrays: # 把每行转为可哈希的元组,统计重复次数 counter = Counter(tuple(row) for row in arr) lines = [] for row_items, count in counter.items(): # 字符串统一转大写,数字直接转字符串 formatted = [i.upper() if isinstance(i, str) else str(i) for i in row_items] lines.append(f"({count}) {' '.join(formatted)}") output_blocks.append("\n".join(lines)) # 不同数组的处理结果用空行分隔 print("\n\n".join(output_blocks))
运行代码后输出和预期完全匹配:
(2) ALPHA 100 (1) ALPHA 200 (2) ALPHA A1 (1) ALPHA A2 (2) 100 A1 (1) 200 A2 (2) ALPHA 100 A1 (1) ALPHA 200 A2
关键逻辑说明
- numpy数组本身是可变类型,不能直接作为字典的键做计数,所以遍历每行时先转成元组再传入Counter统计
- 格式化时只对字符串类型做大写转换,数字类型直接转字符串,避免类型处理错误
- 最后用双换行拼接每个数组的结果块,自动满足不同子数组结果空行分隔的要求,也不会在输出末尾产生多余空行。
内容的提问来源于stack exchange,提问作者Owen Osagiede
相关产品推荐
相关产品推荐

