0

在 Python 中,我有一个带有一些零值的矩阵,我如何应用自然对数并在矩阵条目为零时获得零?我正在使用 numpy.log(matrix) 应用自然对数函数,但是当矩阵条目等于零时我得到 nan ,我希望它为零

4

4 回答 4

1

你可以这样做:

arr = numpy.nan_to_num(numpy.log(matrix))

nan_to_num 的行为将所有 NaN 替换为零。

您可以在这里找到更多信息:

另一种选择是将掩码传递给where=np.log 函数的参数。

于 2019-09-25T16:42:50.090 回答
0

np.log是一个ufuncwhere参数的。这告诉它哪些元素x将用于计算。其余的被跳过。这最好与out参数一起使用,如下所示:

In [25]: x = np.array([1.,2,0,3,10,0])                                          
In [26]: res = np.zeros_like(x)                                                 
In [27]: idx = x>0                                                              
In [28]: np.log(x)                                                              
/usr/local/bin/ipython3:1: RuntimeWarning: divide by zero encountered in log
  #!/usr/bin/python3
Out[28]: 
array([0.        , 0.69314718,       -inf, 1.09861229, 2.30258509,
             -inf])
In [29]: np.log(x, out=res, where=idx)                                          
Out[29]: 
array([0.        , 0.69314718, 0.        , 1.09861229, 2.30258509,
       0.        ])
于 2019-09-25T21:49:14.913 回答
0

您可以使用 np.where。seterr 是关闭警告。

RuntimeWarning:在日志中遇到除以零

在:

np.seterr(divide = 'ignore')

matrix = np.array([[10,0,5], [0,10,12]])
np.where(matrix == 0, 0, np.log(matrix))

出去:

array([[2.30258509, 0.        , 1.60943791],
       [0.        , 2.30258509, 2.48490665]])
于 2019-09-25T16:40:52.450 回答
0

如果条目为零(因为 Log of 1 为零)并且反向操作为 ,您可以使用numpy.log1p它将评估为零numpy.expm1

您可以在文档中找到更多信息:

  1. 日志1p
  2. Expm1
于 2019-09-25T16:40:57.427 回答