假设我有一个整数数组x
,我想做以下事情:
unique_x
x
y
,其中y[i]
是值unique_x
的{{1}}中的索引。我设法做到如下:
x[i]
我的问题是:有没有办法只使用numpy内置函数和一些切片?我觉得如果用numpy内置函数完成这个循环的速度不会那么快。
答案 0 :(得分:2)
如果np.unique()
执行了您想要的操作(仅返回每个元素的第一个出现;它不会仅返回出现一次的元素),则可以使用return_index
参数:
In [1]: x = array([1, 1, 2, 3, 4, 4, 5, 6, 2, 1])
In [2]: unique_x, unique_indexes = np.unique(x, return_index=True)
In [3]: unique_x
Out[3]: array([1, 2, 3, 4, 5, 6])
In [4]: unique_indexes
Out[4]: array([0, 2, 3, 4, 6, 7])
(x
不需要排序,但unique_x
将是。如果你想要从x
重建unique_x
所需的标记,另一方面,你可以使用return_inverse
参数,如@xtofl所指出的那样:
In [5]: unique_x, unique_inverse = np.unique(x, return_inverse=True)
In [6]: unique_inverse
Out[6]: array([0, 0, 1, 2, 3, 3, 4, 5, 1, 0])