当获取 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.])