如何使用numpy在有序值列表中的位置替换值?

时间:2016-12-08 10:45:55

标签: python numpy

我有一个带浮点值的二维矩阵。我想用这个矩阵生成另一个相同维度的矩阵,其中每个值都被它在所有值的有序列表中的位置所取代。

ADDED

需要更具体地说明相同数字时的行为。我希望那个相同的数字得到相同的"位置索引"。

1 个答案:

答案 0 :(得分:2)

我想你想要

np.argsort(np.argsort(A.ravel())).reshape(A.shape)+1

它为您提供排序数组的每个元素的位置(而不是值)。但你的问题并不是很清楚。

A=np.random.rand(3,3)

array([[ 0.64125557,  0.66146481,  0.82042912],
       [ 0.45543483,  0.868029  ,  0.99365448],
       [ 0.20370261,  0.17365685,  0.13530724]])

np.argsort(np.argsort(A.ravel())).reshape(A.shape)+1

array([[5, 6, 7],
       [4, 8, 9],
       [3, 2, 1]], dtype=int32)

编辑:基于Divakar的解决方案,该问题与重复问题一样,但重塑2D阵列:

a
array([[16,  5, 17, 11],
       [ 0, 18, 19,  6],
       [18,  1,  5, 10],
       [ 6, 10, 13, 16]])

np.unique(a,return_inverse=1)[1].reshape(a.shape)+1

array([[ 8,  3,  9,  6],
       [ 1, 10, 11,  4],
       [10,  2,  3,  5],
       [ 4,  5,  7,  8]], dtype=int32)