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 从一个数组转换到另一个数组。但最好(也是最快)的方法是什么?
不知道最快,但如果你有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 开始它的排名。)