我有一个带浮点值的二维矩阵。我想用这个矩阵生成另一个相同维度的矩阵,其中每个值都被它在所有值的有序列表中的位置所取代。
ADDED
需要更具体地说明相同数字时的行为。我希望那个相同的数字得到相同的"位置索引"。
答案 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)