You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:36:47