numpy.unique:如何保留原来的顺序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)
['b','b','b','a','a','c','c']

numpy.unique给出

['a','b','c']

我怎样才能保存原来的顺序?

['b','a','c']
提问于
用户回答回答于

unique()复杂度为O(Nlog(N)),但是您可以通过以下代码来完成:

import numpy as np
a = np.array(['b','a','b','b','d','a','a','c','c'])
_, idx = np.unique(a, return_index=True)
print a[np.sort(idx)]

输出:

['b' 'a' 'd' 'c']

Pandas.unique()对于大数组O(N)来说,速度要快得多:

import pandas as pd

a = np.random.randint(0, 1000, 10000)
%timeit np.unique(a)
%timeit pd.unique(a)

1000 loops, best of 3: 644 us per loop
10000 loops, best of 3: 144 us per loop
用户回答回答于

使用np.unique函数的return_index 。返回元素在输入中第一次出现的索引。然后使用argsort

>>> u, ind = np.unique(['b','b','b','a','a','c','c'], return_index=True)
>>> u[np.argsort(ind)]
array(['b', 'a', 'c'], 
      dtype='|S1')

扫码关注云+社区