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