首页 > 解决方案 > 删除 2D numpy 数组中的重复行,保持第一个实例和排序

问题描述

我有一个二维 Numpy 数组,其中一些行不是唯一的,即当我这样做时:

import numpy as np

data.shape                        #number of rows X columns in data
# (75000, 8)

np.unique(data.T, axis=0).shape   #number of unique rows is fewer than above
# (74801, 8)

从 的第一行开始data我想删除与前一行重复的任何行,保持行的原始顺序。在上面的例子中,新的 Numpy 数组的最终形状应该是 (74801, 8)。

例如,给定以下数据数组

data = np.array([[1,2,1],[2,2,3],[3,3,2],[2,2,3],[1,1,2],[0,0,0],[3,3,2]])
print(data)
[[1 2 1]
 [2 2 3]
 [3 3 2]
 [2 2 3]
 [1 1 2]
 [0 0 0]
 [3 3 2]]

我想拥有原始顺序中的唯一行,即

[[1 2 1]
 [2 2 3]
 [3 3 2]
 [1 1 2]
 [0 0 0]]

任何有关有效解决方案的提示将不胜感激!

标签: pythonnumpyunique

解决方案


尝试numpy.unique使用“return_index”参数:

data[np.sort(np.unique(data, axis = 0, return_index = True)[1])]

顾名思义,它将在元组中按该顺序返回唯一行及其索引(这就是为什么[1]最后有 a )。


您还可以使用pandas

import pandas as pd
pd.DataFrame(data).drop_duplicates().values

推荐阅读