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

合并两个numpy数组去重后拆分回原格式的实现方法

解决Numpy数组合并去重后拆分的问题

你需要的是合并X和y后去除整行重复的条目(即X+y的组合唯一),而非单独去重X或y。之前用np.unique(np.hstack((X,y)))无效是因为默认会扁平化数组去重,而非按行处理。以下是完整解决方案:

步骤说明

  1. 合并X与y为一个二维数组
  2. 按行去重,保留唯一的X+y组合(可选择保留原始顺序)
  3. 将去重后的数组拆分回独立的X和y

示例代码(匹配你的测试用例)

import numpy as np

# 测试输入
X = np.array([
    [1,2,3,4,5,6,7],
    [2,3,4,5,6,7,8],
    [3,4,5,2,1,4,5],
    [1,2,3,4,5,6,7],
    [1,2,3,4,5,6,7],
    [1,2,3,4,5,6,7],
])

y = np.array([
    [2.],
    [3.],
    [4.],
    [2.],
    [3.],
    [4.],
])

# 1. 合并X和y
combined = np.hstack((X, y))

# 2. 按行去重并保留原始顺序
_, unique_idx = np.unique(combined, axis=0, return_index=True)
# 对索引排序,保证结果和原数组顺序一致
sorted_idx = np.sort(unique_idx)
unique_combined = combined[sorted_idx]

# 3. 拆分回X和y
X_unique = unique_combined[:, :-1]  # 取除最后一列外的所有列
y_unique = unique_combined[:, -1].reshape(-1, 1)  # 取最后一列并转为(n,1)形状

# 输出验证
print("X_unique:\n", X_unique)
print("\ny_unique:\n", y_unique)

适配你的实际数据

对于形状为(n, 16928)的X和(n,1)的y,代码完全通用,仅需替换输入数组即可。拆分时也可以直接指定列数:

X_unique = unique_combined[:, :16928]
y_unique = unique_combined[:, 16928:].reshape(-1, 1)

可选:不保留原始顺序

如果不需要维持原数组的行顺序,可简化去重步骤:

unique_combined = np.unique(combined, axis=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:09:26