2016-02-12 17 views
0

假設我有一個N×N矩陣M和一個N元素數組A.A [i]代表M [i,A [ i]]條目。如何在M中將相應的條目快速設置爲給定數組A的值1?Python如何給定一個矩陣中的值,給定一個矩陣的數組元素,表示矩陣的列

通過使用numpy的,到目前爲止,我的嘗試是: M [0:A.shape [0],A] = 1 但是,這並不工作,我不想碰上一個循環是當N很大的時候有點貴。

+0

你使用numpy嗎? –

+0

到目前爲止您嘗試過什麼,它不起作用?請張貼您粗糙的作品 – dganesh2002

+0

我正在使用numpy – user1459581

回答

0

您可以創建一個掩碼,而不是使用它將所有值設置爲1.在這種情況下(對於4x4矩陣和A = [1,3,2,0]),可以通過以下方式創建掩碼:

A = np.array([1, 3, 2, 0]) 
mask = np.zeros((4, 4), int) 
np.fill_diagonal(mask, 1) 
mask = mask[A, :] > 0 

哪個產生掩模:

[[False True False False] 
[False False False True] 
[False False True False] 
[ True False False False]] 

然後,可以容易地將掩模應用到4×4矩陣M和設置相應的值設置爲1

np.random.seed(42) 
M = np.random.uniform(0, 1, 16).reshape(4, 4) 
M[mask] = 1 

結果是:

[[ 0.37454012 1.   0.73199394 0.59865848] 
[ 0.15601864 0.15599452 0.05808361 1.  ] 
[ 0.60111501 0.70807258 1.   0.96990985] 
[ 1.   0.21233911 0.18182497 0.18340451 

或者你可以用一個簡單的for循環,這實際上產生同樣的讓這一切。

A = np.array([1, 3, 2, 0]) 
np.random.seed(42) 
M = np.random.uniform(0, 1, 16).reshape(4, 4) 
M[mask] = 1 

for i, a in enumerate(A): 
    M[i, a] = 1 
相關問題