2024-09-19 02:56:28 发布
网友
假设我有一个nxn矩阵M和一个N元素数组a。a[I]代表M[I,a[I]]项,M中的相应项在给定数组a的情况下如何快速设置为值1?你知道吗
到目前为止,通过使用numpy,我尝试的是: M[0:A.形状[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]]
然后可以轻松地将掩码应用于4x4矩阵M,并将相应的值设置为1。你知道吗
M
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
可以创建一个掩码,然后使用它将所有值设置为1。在这种情况下(对于4x4矩阵和a=[1,3,2,0]),可以通过以下方式创建掩码:
产生面具:
然后可以轻松地将掩码应用于4x4矩阵
M
,并将相应的值设置为1。你知道吗结果是:
或者你也可以用一个简单的for循环来实现这一切,它实际上产生了相同的结果。你知道吗
相关问题 更多 >
编程相关推荐