我有一些数据,我从一个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]
答案 0 :(得分:13)
此警告的先前问题:
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)
要取消警告,您可以:
将这样的内容添加到.bashrc
或者设置环境变量以全局关闭可见的弃用警告:
export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"
运行单个脚本时发出警告:
python -W ignore thisbetterworks.py
运行一个没有警告的块:
import warnings
with warnings.catch_warnings():
warnings.warn("Let this be your last warning")
warnings.simplefilter("ignore")
< your code >
当弃用变为缺席时,你确实会冒这个失败的风险,所以你可能想确保它不会以长期代码结束。