在 numpy array-wise 计算中忽略错误警告

neglect error warning in numpy array-wise calculation

你好我想知道我是否可以使用类似 "try-except" 的东西来避免错误警告并将 np.nan 放入结果数组?

例如

import numpy as np
a = np.array([1,1])
b = np.array([1,0])
c = a/b

会有一个"division by zero error" 我希望忽略此错误并将 c 设置为 np.array([1,np.nan])

我知道我可以使用循环和 try-except 通过遍历数组中的所有元素来实现这一点。但是,有没有更优雅的方法来完成这个循环?

如果必须循环,最快的方法是什么?

In [219]: a = np.array([1,1]) 
     ...: b = np.array([1,0]) 
     ...: c = a/b                                                                              
/usr/local/bin/ipython3:3: RuntimeWarning: divide by zero encountered in true_divide
  # -*- coding: utf-8 -*-
In [220]: c                                                                                    
Out[220]: array([ 1., inf])

/ 替换为 divide。作为 ufunc 它接受 whereout 参数,它们一起工作以跳过 0 并放置 nan 代替:

In [224]: np.divide(a,b, where=(b!=0), out=np.full(a.shape,np.nan))                            
Out[224]: array([ 1., nan])

也可以取消警告,但这不会用 nan 替换 inf。此 ufunc 代码是同时执行这两项操作的最简单方法。