要查看而不是复制的 Numpy 链式索引 "force"

Numpy chained index "force" to be view rather than copy

基本上我希望这个链式切片覆盖值(将第一个元素显示为 2 而不是 1)

tst = np.array([1,2,3,4])
msk1 = [True, False, True, False]
msk2 = [True, False]
tst[msk1][msk2] = 2

tst
> array([1, 2, 3, 4])

此问题是tst[msk1]是切片复制,不是视图

您可以使用 tst[msk1].base 检查它 return 什么都没有(如果是视图,它将 return 原始数组)。所以当你进一步切片修改tst[msk1][mask2] = 2时,实际上修改的是内存中的copy,而不是tst.

据我所知,你cannot force a view with fancy indexing,所以你想要的东西不是直接可以实现的。

一个解决方法可能是获取第一个掩码的索引,然后用第二个掩码对它们进行切片:

idx = np.where(msk1)[0][msk2]
tst[idx] = 2

# print(tst)
# [2 2 3 4]