gpt4 book ai didi

python - numpy 1.13 MaskedArrayFutureWarning : setting an item on a masked array which has a shared mask will not copy the mask

转载 作者:太空狗 更新时间:2023-10-30 01:53:22 30 4
gpt4 key购买 nike

我最近从 numpy 1.11 升级到 numpy 1.13 希望摆脱这个屏蔽数组警告,但它仍然存在:

MaskedArrayFutureWarning:在具有共享掩码的掩码数组上设置项目不会复制掩码,并且将来还会更改原始掩码数组。
查看 NumPy 1.11 发行说明以获取更多信息。*

基本上我的代码只是更改了掩码数组中的一些值,我什至不确定这个错误意味着什么。

我希望升级到 numpy 1.13 可以解决这个问题,但我认为错误在我这边。

为清楚起见,尽管出现引用 1.11 的警告,我仍在运行 numpy 1.13:

Python 2.7.12 (default, Nov 19 2016, 06:48:10)

[GCC 5.4.0 20160609] on linux2

Type "help", "copyright", "credits" or "license" for more information.

import numpy as np

np.version

'1.13.0.dev0+Unknown'

感谢您的帮助。猫

最佳答案

这个共享口罩的生意有点乱。

当前行为:

In [150]: x=np.ma.masked_greater(np.arange(8),5)
In [151]: x
Out[151]:
masked_array(data = [0 1 2 3 4 5 -- --],
mask = [False False False False False False True True],
fill_value = 999999)
In [152]: y=x[3:6] # a view
In [153]: y[0]=30 # modify the view
/usr/local/bin/ipython3:1: MaskedArrayFutureWarning: setting an item on a masked array which has a shared mask will not copy the mask and also change the original mask array in the future.
Check the NumPy 1.11 release notes for more information.
#!/usr/bin/python3

data 值变化与源共享

In [154]: y
Out[154]:
masked_array(data = [30 4 5],
mask = [False False False],
fill_value = 999999)
In [155]: x
Out[155]:
masked_array(data = [0 1 2 30 4 5 -- --],
mask = [False False False False False False True True],
fill_value = 999999)

但是掩码值的改变不是:

In [156]: y.mask[0]=True
In [157]: y
Out[157]:
masked_array(data = [-- 4 5],
mask = [ True False False],
fill_value = 999999)
In [158]: x
Out[158]:
masked_array(data = [0 1 2 30 4 5 -- --],
mask = [False False False False False False True True],
fill_value = 999999)

新建 View ,调用unshare方法:

In [159]: y=x[3:6]
In [160]: y.unshare_mask()
Out[160]:
masked_array(data = [30 4 5],
mask = [False False False],
fill_value = 999999)
In [161]: y[0]=31
In [162]: y
Out[162]:
masked_array(data = [31 4 5],
mask = [False False False],
fill_value = 999999)
In [163]: x
Out[163]:
masked_array(data = [0 1 2 31 4 5 -- --],
mask = [False False False False False False True True],
fill_value = 999999)

这会更改数据,但不会发出警告。

future 的行为,没有警告,可以产生:

In [172]: x=np.ma.masked_greater(np.arange(8),5)
In [174]: y=x[3:6]
In [175]: y._sharedmask=False
In [176]: y[0]=30
In [177]: y.mask[0]=True
In [178]: y
Out[178]:
masked_array(data = [-- 4 5],
mask = [ True False False],
fill_value = 999999)
In [179]: x
Out[179]:
masked_array(data = [0 1 2 -- 4 5 -- --],
mask = [False False False True False False True True],
fill_value = 999999)

新值和掩码同时出现在 yx 中。

底线是 - 当您更改 y(数据或掩码)中的值时,x 中的掩码会发生什么情况?改还是不改?

=================

或者在 View 中设置数据值也会更改掩码的情况可能会更清楚:

In [199]: x=np.ma.masked_greater(np.arange(8),5)
In [200]: y=x[4:]
In [201]: y
Out[201]:
masked_array(data = [4 5 -- --],
mask = [False False True True],
fill_value = 999999)
In [202]: y[-1]=0
/usr/local/bin/ipython3:1: MaskedArrayFutureWarning: setting an item on a masked array which has a shared mask will not copy the mask and also change the original mask array in the future.
Check the NumPy 1.11 release notes for more information.
#!/usr/bin/python3
In [203]: y
Out[203]:
masked_array(data = [4 5 -- 0],
mask = [False False True False],
fill_value = 999999)
In [204]: x
Out[204]:
masked_array(data = [0 1 2 3 4 5 -- --],
mask = [False False False False False False True True],
fill_value = 999999)

最后的 y 值未被屏蔽,但相应的 x 没有(我应该显示 x.data 的变化)。这是您被警告的当前行为。

但是对于 future 行为:

In [205]: y=x[4:]
In [206]: y._sharedmask=False
In [207]: y[-1]=0
In [208]: y
Out[208]:
masked_array(data = [4 5 -- 0],
mask = [False False True False],
fill_value = 999999)
In [209]: x
Out[209]:
masked_array(data = [0 1 2 3 4 5 -- 0],
mask = [False False False False False False True False],
fill_value = 999999)

x 数据和掩码随 y 一起更改。

关于python - numpy 1.13 MaskedArrayFutureWarning : setting an item on a masked array which has a shared mask will not copy the mask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028253/

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