2017-05-11 62 views
3

比方說,我有一個四維陣列是如何替換4維數組中的值?

(600, 1, 3, 3) 

如果你採取的第一個2元,他們可能看起來像這樣:

0 1 0 
1 1 1 
0 1 0 

2 2 2 
3 3 3 
1 1 1 

etc 

我有一個包含我想一定權重的列表替換數組中的特定值。我的意圖是使用列表元素的索引匹配數組中的值。因此,這個名單

[0.1 1.1 1.2 1.3] 

時對我的陣列應用將給這個結果:

0.1 1.1 0.1 
1.1 1.1 1.1 
0.1 1.1 0.1 

1.2 1.2 1.2 
1.3 1.3 1.3 
1.1 1.1 1.1 

etc 

此方法將有權通過陣列的整個600組的元素來運行。

我可以做到這一點在使用for環和array[array==x] = ynp.place笨重的方式,但我想避免一個循環,並可能使用一種方法,在一度將替換所有值。有沒有這樣的方法?

+1

只需索引到數組版本:'np.asarray(vals)[idx]',其中'vals'是列表,'idx'是那些'4D'索引?或者使用'np.take(vals,idx)'在引擎蓋下進行數組轉換。 – Divakar

+0

這可能工作,但你如何將它應用到4D陣列? – pepe

+0

我剛纔告訴你 - idx是4D索引數組。 – Divakar

回答

1

從報價@ Divakar在評論的解決方案,它解決了一個非常有效的方式問題:

簡單的索引數組版本: np.asarray(vals)[idx],其中vals是 列表,idx是數組。 或者使用np.take(vals, idx)來進行數組轉換。