numpy:true_divide中遇到的值无效

时间:2015-01-08 14:51:21

标签: python arrays numpy

我有两个numpy数组,我试图将一个与另一个分开,同时,我想确保除数为0的条目应该被替换为0。

所以,我做了类似的事情:

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0)

这给了我一个运行时警告:

RuntimeWarning: invalid value encountered in true_divide

现在,我想看看发生了什么,我做了以下事情:

xx = np.isfinite(diff_images)
print (xx[xx == False])

xx = np.isfinite(b_0)
print (xx[xx == False])

但是,这两个都返回空数组,这意味着数组中的所有值都是有限的。所以,我不确定无效值的来源。我假设检查b_0> np.where函数中的0用于处理除以0。

两个阵列的形状是(96,96,55,64)和(96,96,55,1)

3 个答案:

答案 0 :(得分:7)

您可能会在某处浮动NANINFNINF。试试这个:

np.isfinite(diff_images).all()
np.isfinite(b_0).all()

如果其中一个或两个都返回False,则可能是运行时错误的原因。

答案 1 :(得分:2)

运行时出现运行时警告的原因:

e6134156ba833d22c30d4e387103505727232f74905b3a3119bd4b6d121cbff4 97181907f5f1a5b61d8c

是内心的表达

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0)

首先进行评估,并在 np.divide(diff_images, b_0) diff_images 的所有元素上运行(即使您最终忽略了涉及被零除的元素)。换句话说,警告发生在之前忽略这些元素的代码。这就是为什么它是警告而不是错误的原因:存在这样的合法情况,其中除以零不是问题,因为它是在以后的操作中处理的。

答案 2 :(得分:1)

另一个有用的Numpy命令是nan_to_num(diff_images) 默认情况下,它替换为Numpy数组; NaN为零,-INF为-(大数),+ INF为+(大数)

您可以更改默认值,请参见https://numpy.org/doc/stable/reference/generated/numpy.nan_to_num.html