Python如何在给定数组元素的矩阵中设置值,该数组元素表示矩阵的列

时间:2016-02-12 22:31:11

标签: python

假设我有一个N×N矩阵M和一个N元素数组A.A [i]表示M中的M [i,A [i]]条目。如何快速将M中的相应条目设置为给定值1数组A?

到目前为止使用numpy,我尝试的是: M [0:A.shape [0],A] = 1 但这不起作用,我不想遇到一个循环,当N很大时,这种循环很有用。

1 个答案:

答案 0 :(得分:0)

您可以创建一个遮罩,而不是用它来将所有值设置为1.在这种情况下(对于4x4矩阵和A = [1,3,2,0]),可以通过以下方式创建遮罩:< / p>

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]]

然后,您可以轻松地将蒙版应用于4x4矩阵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