我只需要删除在数组中重复但保留其中一个的行,我不能使用唯一的,因为我需要维护顺序。例子
1 a234 125
1 a123 265
1 a234 125
1 a145 167
1 a234 125
2 a189 547
2 a189 547
3 a678 567
3 a357 569
我需要这个输出
1 a234 125
1 a123 265
1 a145 167
2 a189 547
3 a678 567
3 a357 569
我只需要删除在数组中重复但保留其中一个的行,我不能使用唯一的,因为我需要维护顺序。例子
1 a234 125
1 a123 265
1 a234 125
1 a145 167
1 a234 125
2 a189 547
2 a189 547
3 a678 567
3 a357 569
我需要这个输出
1 a234 125
1 a123 265
1 a145 167
2 a189 547
3 a678 567
3 a357 569
我认为这可以满足您的要求,并np.unique
与return_index
关键字参数一起使用:
import numpy as np
a = np.array([[1, 'a234', 125],
[2, 'b189', 547],
[1, 'a234', 125],
[3, 'c678', 567],
[1, 'a234', 125],
[2, 'b189', 547]])
b = a.ravel().view(np.dtype((np.void, a.dtype.itemsize*a.shape[1])))
_, unique_idx = np.unique(b, return_index=True)
new_a = a[np.sort(unique_idx)]
>>> new_a
array([['1', 'a234', '125'],
['2', 'b189', '547'],
['3', 'c678', '567']],
dtype='|S4')
最骇人听闻的部分是视图b
,它将每一行转换为 的单个元素np.void
dtype
,以便可以比较完整的行是否相等np.unique
。