我從包含N
唯一值(product(a.shape) >= N
)的數組a
開始。
我需要找到a
中a
中各個元素位置處的(排序的)唯一值列表中的索引0 .. N-1
的數組b
。獨特值的指標陣列
作爲示例
import numpy as np
np.random.seed(42)
a = np.random.choice([0.1,1.3,7,9.4], size=(4,3))
print a
打印a
作爲
[[ 7. 9.4 0.1]
[ 7. 7. 9.4]
[ 0.1 0.1 7. ]
[ 1.3 7. 7. ]]
的唯一值是[0.1, 1.3, 7.0, 9.4]
,所以所需的結果b
將是
[[2 3 0]
[2 2 3]
[0 0 2]
[1 2 2]]
(例如,在a[0,0]
值是7.
; 7.
的索引號爲2
;因此b[0,0] == 2
。)
由於numpy does not have an index function, 我可以使用循環做到這一點。或者遍歷輸入數組,像這樣:
u = np.unique(a).tolist()
af = a.flatten()
b = np.empty(len(af), dtype=int)
for i in range(len(af)):
b[i] = u.index(af[i])
b = b.reshape(a.shape)
print b
或遍歷的唯一值如下:
u = np.unique(a)
b = np.empty(a.shape, dtype=int)
for i in range(len(u)):
b[np.where(a == u[i])] = i
print b
我假定遍歷的唯一值的第二個方法是已經比更有效第一種情況下,a
中的所有值都不相同;但是它仍然涉及到這個循環,與現場操作相比效率相當低。
所以我的問題是:什麼是最有效的方式獲得數組b
填充a
的唯一值的indizes?
哇,這已經是被接受的非常好的候選人。然而它返回(創建)兩個大小爲'a'的數組,對嗎?所以在內存方面可能會有更高效的解決方案?! – ImportanceOfBeingErnest
@ImportanceOfBeingErnest增加了另一個非常非常邊緣的改進。 – Divakar