我想遍历数组的数组,如果已经读过相同的数组,请跳到下一个数组。以下代码可以正常工作,但是我正在寻找更“ 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. ]
时,我跳到下一个数组。
答案 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]])