可见的弃用警告......?

时间:2016-02-17 18:49:56

标签: arrays numpy warnings h5py

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

“VisibleDeprecationWarning:布尔索引与维度0的索引数组不匹配;维度为44但对应的布尔维度为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]

2 个答案:

答案 0 :(得分:13)

此警告的先前问题:

VisibleDeprecationWarning: boolean index did not match indexed array along dimension 1; dimension is 2 but corresponding boolean dimension is 1

https://stackoverflow.com/a/34296620/901925

我认为这是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])

运行正常,即使ind短于x。它有效地用ind填充False。我认为较新版本继续进行计算,但发出此警告。我需要找到一个改变它的提交或讨论它的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 :(得分:3)

要取消警告,您可以:

  1. (恶)
  2. 将这样的内容添加到.bashrc或者设置环境变量以全局关闭可见的弃用警告:

    export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"

    1. (坏)
    2. 运行单个脚本时发出警告:

      python -W ignore thisbetterworks.py

      1. (okayish)
      2. 运行一个没有警告的块:

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

        当弃用变为缺席时,你确实会冒这个失败的风险,所以你可能想确保它不会以长期代码结束。