【发布时间】:2019-09-26 05:49:14
【问题描述】:
在 Python 中,我有一个包含一些零值的矩阵,我如何应用自然对数并在矩阵条目为零时获得零?我正在使用 numpy.log(matrix) 来应用自然对数函数,但是当矩阵条目等于零时我得到 nan,我希望它为零
【问题讨论】:
-
所有选项都很好,非常感谢
标签: python numpy natural-logarithm
在 Python 中,我有一个包含一些零值的矩阵,我如何应用自然对数并在矩阵条目为零时获得零?我正在使用 numpy.log(matrix) 来应用自然对数函数,但是当矩阵条目等于零时我得到 nan,我希望它为零
【问题讨论】:
标签: python numpy natural-logarithm
你可以这样做:
arr = numpy.nan_to_num(numpy.log(matrix))
nan_to_num 的行为将所有 NaN 替换为零。
您可以在此处找到更多信息:
另一种选择是将掩码传递给 np.log 函数的 where= 参数。
【讨论】:
您可以使用 np.where。 seterr 是关闭警告。
RuntimeWarning: divide by zero encountered in log
在:
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]])
【讨论】:
np.errstate(divide='ignore'):一起使用
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. ])
【讨论】: