可见弃用警告...?

Visible Deprecation warning...?

我有一些数据是从 h5 文件中以 numpy 数组的形式读取的,并且正在对其进行一些分析。对于上下文,数据绘制了光谱响应曲线。我正在索引数据(以及我为 x 轴创建的后续数组)以获取特定值或值范围。我没有做任何复杂的事情,甚至我正在做的小数学也很基础。但是我在很多地方收到以下警告错误

"VisibleDeprecationWarning: boolean index did not match indexed array along dimension 0; dimension is 44 but corresponding boolean dimension is 17"

尽管我检查时得到的输出是正确的。

谁能解释一下这个警告是什么意思,我是否需要比现在更关心它?

我不确定示例代码是否能对此提供更多信息,但看到它是在我对数组进行索引和切片时出现的警告,这里有一些警告:

data = h5py.File(file,'r')
dset = data['/DATA/DATA/'][:]
vals1 = dset[0]

AVIRIS = numpy.linspace(346.2995778, 2505.0363678, 432)
AVIRIS1 = AVIRIS[vals1>0]
AVIRIS1 = AVIRIS[vals1<1]

关于此警告的先前问题:

我认为这是 numpy 1.10 中的新功能,是使用比数组短的布尔索引的结果。我没有安装那个版本所以不能举个例子。但是在早期的 numpy

In [667]: x=np.arange(10)
In [668]: ind=np.array([1,0,0,1],bool)
In [669]: ind
Out[669]: array([ True, False, False,  True], dtype=bool)
In [670]: x[ind]
Out[670]: array([0, 3])

运行正常,即使 indx 短。它有效地用 False 填充 ind。我认为较新的版本会继续进行计算,但会发出此警告。我需要找到更改此内容的提交或讨论它的 SO 问题。

可以抑制警告 - 请参阅边栏。但是你真的应该检查有问题的数组的形状。它们是否匹配,或者布尔索引是否太短?你能更正一下吗?

Github 讨论

https://github.com/numpy/numpy/issues/4980 布尔数组索引无提示地失败 #4980

拉取请求

https://github.com/numpy/numpy/pull/4353 DEP:弃用形状不匹配的布尔数组索引 #4353

要抑制警告,请使用类似的东西:

import warnings
warnings.filterwarnings("ignore", category=np.VisibleDeprecationWarning) 

您可能需要调整类别名称才能使其正确。

要取消警告,您可以:

  1. (邪恶)

在您的 .bashrc 或您设置环境变量的任何地方添加类似这样的内容以全局关闭可见的弃用警告:

export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"

  1. (差)

在 运行 单个脚本时关闭警告:

python -W ignore thisbetterworks.py

  1. (还行)

运行 一个没有警告的块:

import warnings with warnings.catch_warnings(): warnings.warn("Let this be your last warning") warnings.simplefilter("ignore") < your code >

当然你会 运行 当弃用变成缺席时,这种失败的风险,所以你可能想确保它不会在长期代码中结束。