合并两个numpy数组去重后拆分回原格式的实现方法
解决Numpy数组合并去重后拆分的问题
你需要的是合并X和y后去除整行重复的条目(即X+y的组合唯一),而非单独去重X或y。之前用np.unique(np.hstack((X,y)))无效是因为默认会扁平化数组去重,而非按行处理。以下是完整解决方案:
步骤说明
- 合并X与y为一个二维数组
- 按行去重,保留唯一的
X+y组合(可选择保留原始顺序) - 将去重后的数组拆分回独立的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
相关产品推荐
相关产品推荐

