2016-02-12 16 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 
相关问题