我有一個浮點值的二維矩陣。我想用這個矩陣來生成另一個相同維度的矩陣,其中每個值都被它在所有值的有序列表中的位置替換。如何使用numpy替換值在有序值列表中的位置?
ADDED
在需要更具體約以相同的數量的情況下的行爲。我想讓相同的數字得到相同的「位置索引」。
我有一個浮點值的二維矩陣。我想用這個矩陣來生成另一個相同維度的矩陣,其中每個值都被它在所有值的有序列表中的位置替換。如何使用numpy替換值在有序值列表中的位置?
ADDED
在需要更具體約以相同的數量的情況下的行爲。我想讓相同的數字得到相同的「位置索引」。
我想你想
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的解決方案,這確實與重複問過,但對於整形二維數組:
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)
添加樣品的情況下? – Divakar
如果您有所有值的有序列表,爲什麼您需要替換原始數組中的值?你不能僅僅從這個列表中創建一個數組嗎?沒有一個例子,你的問題是不清楚的 – EdChum
@EdChum,我想要「位置」而不是「價值」(我編輯了我的問題)。例如,值「3.8」可能是底部的第二個值。所以,我想將它替換爲2(如果從0開始計數,則爲1)。 – Roman