gpt4 book ai didi

python - 通过索引和掩码更新?

转载 作者:行者123 更新时间:2023-12-02 00:01:16 24 4
gpt4 key购买 nike

我有一个大的二维数组,我通过索引访问它。我只想更新索引数组中不为零的值。

arrayx = np.random.random((10,10))

假设我有索引(这只是示例,实际索引是由单独的进程生成的):

idxs = np.array([[4],
[5],
[6],
[7],
[8]]), np.array([[5, 9]])

考虑到这些索引,这应该可行,但事实并非如此。

arrayx[idxs]

array([[0.7 , 0.1 ],
[0.79, 0.51],
[0. , 0.8 ],
[0.82, 0.32],
[0.82, 0.89]], dtype=float16)

// note from editor: '<>' is equivalent to '!='
// but I agree that '>' 0 is more correct
// mask = mapx[idxs] <> 0 // original
mask = arrayx[idxs] > 0 // better

array([[ True, True],
[ True, True],
[False, True],
[ True, True],
[ True, True]])

arrayx[idxs][mask] += 1

但是,这不会更新数组。我该如何解决这个问题?

最佳答案

一个简单的 np.where将掩码作为要选择和分配的第一个输入 -

mapx[idxs] = np.where(mask,mapx[idxs]+1,mapx[idxs])

自定义更新值

第二个参数(此处为 mapx[idxs]+1)可以编辑为任何复杂的更新,您可能会对与 True 中的 True 对应的屏蔽位置进行操作掩码。因此,假设您正在使用以下命令对 mask 位置进行更新:

mapx[idxs] += x * (A - mapx[idxs])

然后,将第二个参数替换为 mapx[idxs] + x * (A - mapx[idxs])

<小时/>

另一种方法是从 mask 中的 True 中提取整数索引,然后创建基于掩码选择性的新 idxs,就像这样-

r,c = np.nonzero(mask)
idxs_new = (idxs[0][:,0][r], idxs[1][0][c])
mapx[idxs_new] += 1

可以对最后一步进行类似的编辑以进行自定义更新。只需使用 idxs_new 代替 idxs 即可更新。

关于python - 通过索引和掩码更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59188293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com