我们可以从numpy的独特功能中推断出一个argsort数组吗?

时间:2017-01-09 18:27:48

标签: python numpy

From the docs

  

返回数组的已排序唯一元素。除了唯一元素外,还有三个可选输出:提供唯一值的输入数组的索引,重构输入数组的唯一数组的索引,以及输入数组中每个唯一值出现的次数

因此,numpy.unique必须执行排序算法。有没有办法从numpy.unique的输出推断出排序依据。换句话说,我们可以纯粹从argsort的输出中得出numpy.unique的相同结果,所以我不必排序两次。

将数组ab视为样本数据。

import numpy as np
from string import ascii_letters

np.random.seed([3,1415])
n = 10000
a = np.random.randint(100, size=n)
b = np.random.choice(list(ascii_letters), n)

1 个答案:

答案 0 :(得分:0)

我刚刚写了我自己独特的功能

def unique(a):
    s = a.argsort()
    a_ = a[s]
    return a_[np.append(True, (a_[1:] != a_[:-1]))], s

<强> 定时
@hpaulj是对的。请注意,当unique被要求返回np.unique数组时,我的自定义np.uniqueinverse一样快。否则,当它只返回unique值时,它会快一点。

enter image description here