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很大的時候有點貴。
假設我有一個N×N矩陣M和一個N元素數組A.A [i]代表M [i,A [ i]]條目。如何在M中將相應的條目快速設置爲給定數組A的值1?Python如何給定一個矩陣中的值,給定一個矩陣的數組元素,表示矩陣的列
通過使用numpy的,到目前爲止,我的嘗試是: M [0:A.shape [0],A] = 1 但是,這並不工作,我不想碰上一個循環是當N很大的時候有點貴。
您可以創建一個掩碼,而不是使用它將所有值設置爲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
你使用numpy嗎? –
到目前爲止您嘗試過什麼,它不起作用?請張貼您粗糙的作品 – dganesh2002
我正在使用numpy – user1459581