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

如何从包含不同长度子数组的numpy数组中提取唯一元素

解决方案

报错原因

np.unique默认会尝试对数组元素进行广播比较,长度不同的numpy数组无法执行广播操作,因此直接调用会抛出形状不匹配的错误。

方案1:纯Python实现(无额外依赖)

核心思路是将不可哈希的numpy数组转为可哈希的元组,通过集合记录已出现的元素实现去重:

# 第一步:提取所有子数组(适配你给出的main_arr结构:每个元素是[子数组])
sub_arrays = [item[0] for item in main_arr]

seen = set()
unique_subarrays = []
for arr in sub_arrays:
    arr_tuple = tuple(arr)
    if arr_tuple not in seen:
        seen.add(arr_tuple)
        unique_subarrays.append(arr)

# 如果需要恢复为和原main_arr相同的嵌套结构,执行以下代码
import numpy as np
unique_main_arr = np.array([[arr] for arr in unique_subarrays], dtype=object)

方案2:高性能实现(适合子数组长度较大的场景)

如果子数组元素很多,转元组的性能开销较高,可以通过数组的形状+字节内容作为去重标识,速度提升非常明显:

sub_arrays = [item[0] for item in main_arr]

seen = set()
unique_subarrays = []
for arr in sub_arrays:
    # 同时记录形状和字节内容,避免不同形状但字节内容巧合一致的误判
    unique_key = (arr.shape, arr.tobytes())
    if unique_key not in seen:
        seen.add(unique_key)
        unique_subarrays.append(arr)

可选:浮点数精度适配

如果存在浮点数精度误差需要忽略(比如3.1415926和3.1415927判定为相同),可以先对数组做精度截断再生成标识:

# 示例保留4位小数,可按需调整decimals参数
unique_key = (arr.shape, np.round(arr, decimals=4).tobytes())

内容的提问来源于stack exchange,提问作者NeStack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:57:02