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

2024-09-19 02:56:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个nxn矩阵M和一个N元素数组a。a[I]代表M[I,a[I]]项,M中的相应项在给定数组a的情况下如何快速设置为值1?你知道吗

到目前为止,通过使用numpy,我尝试的是: M[0:A.形状[0],A]=1 但这不起作用,我不想遇到一个循环,当N很大的时候,这个循环有点昂贵。你知道吗


Tags: numpy元素情况代表矩阵数组形状nxn
1条回答
网友
1楼 · 发布于 2024-09-19 02:56:28

可以创建一个掩码,然后使用它将所有值设置为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]]

然后可以轻松地将掩码应用于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

相关问题 更多 >