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

10-05 21:15
查看更多