在 Python 中,我有一个带有一些零值的矩阵,我如何应用自然对数并在矩阵条目为零时获得零?我正在使用 numpy.log(matrix) 应用自然对数函数,但是当矩阵条目等于零时我得到 nan ,我希望它为零
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
是一个ufunc
带where
参数的。这告诉它哪些元素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 是关闭警告。
在:
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 回答