将 numpy 数组更改为从零开始

rob*_*anf 3 arrays numpy python-2.7

我试图找出一种方法来获取一个 numpy 整数数组,然后更改条目以使最小的为 0,第二小的为 1,等等。

例如

从这个开始

In [13]: a = numpy.array([[1, 2, 10],[1, 2, 99]])

In [14]: a
Out[14]: 
array([[ 1,  2, 10],
       [ 1,  2, 99]])
Run Code Online (Sandbox Code Playgroud)

得到这个:

array([[ 0,  1, 2],
       [ 0,  1, 3]])
Run Code Online (Sandbox Code Playgroud)

我可以开始看到 numpy.unique() 的方法,例如

In [19]: range(len(b))
Out[19]: [0, 1, 2, 3]

In [20]: b = numpy.unique(a)

In [21]: b
Out[21]: array([ 1,  2, 10, 99])

In [22]: c = range(len(b))

In [23]: c
Out[23]: [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

似乎我现在应该能够使用 b 和 c 从一个数组转换到另一个数组。但最好(也是最快)的方法是什么?

DSM*_*DSM 5

不知道最快,但如果你有scipy可用的,你可以使用scipy.stats.rankdata

>>> a = np.array([[1, 2, 10],[1, 2, 99]])
>>> scipy.stats.rankdata(a,'dense').reshape(a.shape)-1
array([[ 0.,  1.,  2.],
       [ 0.,  1.,  3.]])
Run Code Online (Sandbox Code Playgroud)

reshape需要因为它首先展平数据,并且-1因为它从 1 开始它的排名。)