如何以python方式删除数组数组中的重复数组?

时间:2018-09-01 17:07:39

标签: python arrays numpy

我想遍历数组的数组,如果已经读过相同的数组,请跳到下一个数组。以下代码可以正常工作,但是我正在寻找更“ pythonic”风格的解决方案。

from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
X = iris.data[:, :2]

read = []
for x in X:
    temp = True
    for r in read:
        if np.array_equal(x, r):
            temp = False
    if temp:
        read.append(x)
        # do some stuff

X的类型和内容:

>>> type(X)
<class 'numpy.ndarray'>

>>> X
array([[5.1, 3.5],
   [4.9, 3. ],
   [4.9, 3. ]
   [4.7, 3.2],
   [4.6, 3.1],
   [5. , 3.6],
   ...
   [5.9, 3. ]])

例如,当我第一次阅读[4.9, 3. ]时,我会做一些事情。当我再次阅读[4.9, 3. ]时,我跳到下一个数组。

1 个答案:

答案 0 :(得分:0)

您可以在axis=0中使用numpy.unique。为了保留顺序,您可以提取索引,对其进行排序,然后使用排序后的索引对数组进行索引。然后只需遍历结果即可。

这是一个最小的例子:

A = np.array([[5.1, 3.5],
              [4.9, 3. ],
              [4.9, 3. ],
              [4.7, 3.2]])

_, idx = np.unique(A, axis=0, return_index=True)

print(A[np.sort(idx)])

array([[5.1, 3.5],
       [4.9, 3. ],
       [4.7, 3.2]])