gpt4 book ai didi

python - 在 Numpy 中切片蒙面数组时如何保留蒙面?

转载 作者:行者123 更新时间:2023-11-28 16:28:46 25 4
gpt4 key购买 nike

当我创建一个 Numpy 掩码数组的 View (通过切片)时,掩码被复制到 View 中——这样对 View 的更新不会改变原始掩码(但会更改原始数组中的数据)。

我想要的是在更新 View 时同时更改原始数据原始掩码。

来自Numpy documentation :

When accessing a slice, the output is a masked array whose data attribute is a view of the original data, and whose mask is either nomask (if there was no invalid entries in the original array) or a copy of the corresponding slice of the original mask. The copy is required to avoid propagation of any modification of the mask to the original.

例子

import numpy.ma as ma

orig_arr = ma.array([[11,12],[21,22]])
orig_arr[1,:] = ma.masked

print orig_arr
## Prints: [[11 12]
## [-- --]]

view_arr = orig_arr[1,:]
print view_arr
## Prints: [-- --]

view_arr[:] = [31,32]
print view_arr
## Prints: [31 32]

print orig_arr
## Prints: [[11 12]
## [-- --]]
print orig_arr.data[1,:]
## Prints: [31 32]

可以看到原数组中的数据已经更新了,但是面具没有。

如何使 View 中的更新影响原始数组中的 mask ?

最佳答案

尝试在更改值之前关闭 View 中的 mask

orig_arr = ma.array([[11,12],[21,22]])
orig_arr[1,:] = ma.masked

print orig_arr
## Prints: [[11 12]
## [-- --]]

view_arr = orig_arr[1,:]
print view_arr
## Prints: [-- --]

view_arr.mask=False # or [True, False]


view_arr[:] = [31,32]
print view_arr
## Prints: [31 32] #or [-- 32]

print orig_arr
## Prints: [[11 12]
## [31 32]] # or [-- 32]

关于python - 在 Numpy 中切片蒙面数组时如何保留蒙面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34229986/

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