python – 使用np.log(数组)时忽略负值
作者:互联网
在numpy数组中获取特定列的日志时,即logSFROIIdC = np.log(data_dC [:,9]),编译器将返回错误:
-c:13: RuntimeWarning: divide by zero encountered in log.
现在,我知道为什么会发生这种情况,即log(-1)= Math Error.
但是,我希望能够调用某些内容或编写一些代码,然后跳过数组中任何会导致此错误的值,然后完全忽略该行.允许该数据列再次可用.
我尝试了各种方法,这是向社区提出的最后手段.
解决方法:
您可以使用np.seterr
控制此行为.这是一个示例.
首先,告诉numpy忽略无效值:
In [4]: old = np.seterr(invalid='ignore')
现在log(-1)不会生成警告:
In [5]: x = np.array([-1.,1])
In [6]: np.log(x)
Out[6]: array([ nan, 0.])
恢复以前的设置:
In [7]: np.seterr(**old)
Out[7]: {'divide': 'warn', 'invalid': 'ignore', 'over': 'warn', 'under': 'ignore'}
现在我们收到警告:
In [8]: np.log(x)
/Users/warren/anaconda/bin/ipython:1: RuntimeWarning: invalid value encountered in log
#!/Users/warren/anaconda/python.app/Contents/MacOS/python
Out[8]: array([ nan, 0.])
还有一个上下文管理器,np.errstate
.例如,
In [10]: with np.errstate(invalid='ignore'):
....: y = np.log(x)
....:
In [11]: y
Out[11]: array([ nan, 0.])
标签:logarithm,python,arrays,numpy,matplotlib 来源: https://codeday.me/bug/20190725/1530163.html