Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy:在true\u divide中遇到无效值_Python_Arrays_Numpy - Fatal编程技术网

Python numpy:在true\u divide中遇到无效值

Python numpy:在true\u divide中遇到无效值,python,arrays,numpy,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(d

我有两个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])
但是,这两个函数都返回空数组,这意味着数组中的所有值都是有限的。因此,我不确定无效值来自何处。我假设在np中检查b_0>0,其中函数负责除以0


这两个数组的形状是(96,96,55,64)和(96,96,55,1)

你可能有一个
NAN
INF
,或者
NINF
在某处浮动。试试这个:

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

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

另一个有用的Numpy命令是nan\u to\u num(diff\u图像) 默认情况下,它在Numpy数组中替换;NaN到零,-INF到-(大数字)和+INF到+(大数字)


您可以更改默认值,请参阅运行此命令时出现运行时警告的原因:

log\u norm\u images=np.where(b\u 0>0,np.divide(diff\u images,b\u 0),0)
这是内心的表达吗

np.divide(不同图像,b\u 0)

首先求值,并在
diff_images
b_0
的所有元素上运行(即使最终忽略了包含零除的元素)。换句话说,警告发生在忽略这些元素的代码之前。这就是为什么它是一个警告而不是一个错误:像这样的合法情况下,被零除不是一个问题,因为它是在以后的操作中处理的。

为什么
xx
False
和dict?我认为isfinite返回一个布尔数组。因此,我正在寻找值不是有限的地方。请尝试
[x代表x,如果x==False]
。我想,您只是试图获取与之相关的键
False
:不管它值多少钱,您都可以使用
~
操作符“反转”布尔数组。例如,
打印你的_数据[~np.isfinite(你的_数据)]
@Luca抱歉,编辑了答案-我忘了你刚才在处理多维数组。:)谢谢但它们都返回true:/看起来您可以安全地忽略警告。我尝试使用两个随机数组(其中一个数组中的任意元素设置为0)执行此操作—第一次运行
np.where
,我会收到运行时警告,但如果第二次重复完全相同的表达式,我就不会收到警告。在验证输出是否确实看起来应该出现后,我决定忽略此警告。所以,使用“with-np.errstate(invalid='ignore',divide='ignore'):”@Luca我想你应该写下这个作为答案。