使用np.log(array)时忽略负值

GCi*_*ien 3 python arrays numpy logarithm matplotlib

当获取numpy数组中特定列的日志时,即,logSFROIIdC = np.log(data_dC[:, 9])编译器返回错误:

-c:13: RuntimeWarning: divide by zero encountered in log.
Run Code Online (Sandbox Code Playgroud)

现在,我知道为什么会这样,即log(-1)= Math Error。

但是,我希望能够调用某些内容或编写一些代码,然后跳过将导致此错误的数组中的任何值,然后完全忽略该行。允许该数据列再次可用。

我尝试了各种方法,这是向社区提出的不得已的方法。

War*_*ser 5

您可以使用来控制此行为np.seterr。这是一个例子。

首先,告诉numpy 忽略无效值:

In [4]: old = np.seterr(invalid='ignore')
Run Code Online (Sandbox Code Playgroud)

现在log(-1)不会生成警告:

In [5]: x = np.array([-1.,1])

In [6]: np.log(x)
Out[6]: array([ nan,   0.])
Run Code Online (Sandbox Code Playgroud)

恢复以前的设置:

In [7]: np.seterr(**old)
Out[7]: {'divide': 'warn', 'invalid': 'ignore', 'over': 'warn', 'under': 'ignore'}
Run Code Online (Sandbox Code Playgroud)

现在我们得到警告:

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.])
Run Code Online (Sandbox Code Playgroud)

还有一个上下文管理器np.errstate。例如,

In [10]: with np.errstate(invalid='ignore'):
   ....:     y = np.log(x)
   ....:     

In [11]: y
Out[11]: array([ nan,   0.])
Run Code Online (Sandbox Code Playgroud)