numpy.nan_to_num#

numpy.nan_to_num(x, copy=True, nan=0.0, posinf=None, neginf=None)[源代码]#

用零替换 NaN,用大有限数(默认行为)或用户定义的 nanposinf 和/或 neginf 关键字定义的数值替换无穷大。

如果 x 是非精确数,则 NaN 被替换为零或 nan 关键字中用户定义的值,无穷大被替换为 x.dtype 可表示的最大有限浮点数,或 posinf 关键字中用户定义的值,而负无穷大被替换为 x.dtype 可表示的最小负有限浮点数,或 neginf 关键字中用户定义的值。

对于复数 dtype,上述操作将分别应用于 x 的实部和虚部。

如果 x 不是非精确数,则不进行任何替换。

参数:
x标量或类数组

输入数据。

copybool, optional

是否创建 x 的副本(True)或就地替换值(False)。就地操作仅在强制类型转换到数组不需要副本时发生。默认值为 True。

nan整数、浮点数、布尔值或整数、浮点数、布尔值的类数组,可选

用于填充 NaN 值的值。如果未提供值,则 NaN 值将被替换为 0.0。

posinf整数、浮点数、布尔值或整数、浮点数、布尔值的类数组,可选

用于填充正无穷大值的值。如果未提供值,则正无穷大值将被替换为一个非常大的数字。

neginf整数、浮点数、布尔值或整数、浮点数、布尔值的类数组,可选

用于填充负无穷大值的值。如果未提供值,则负无穷大值将被替换为一个非常小(或负)的数字。

返回:
outndarray

x,其中非有限值已被替换。如果 copy 为 False,则这可能是 x 本身。

另请参阅

isinf

显示哪些元素是正无穷大或负无穷大。

isneginf

显示哪些元素是负无穷大。

isposinf

显示哪些元素是正无穷大。

isnan

显示哪些元素是“非数字”(NaN)。

isfinite

显示哪些元素是有限的(不是 NaN,不是无穷大)。

备注

NumPy 使用 IEEE 二进制浮点运算标准 (IEEE 754)。这意味着 NaN 不等同于无穷大。

示例

>>> import numpy as np
>>> np.nan_to_num(np.inf)
1.7976931348623157e+308
>>> np.nan_to_num(-np.inf)
-1.7976931348623157e+308
>>> np.nan_to_num(np.nan)
0.0
>>> x = np.array([np.inf, -np.inf, np.nan, -128, 128])
>>> np.nan_to_num(x)
array([ 1.79769313e+308, -1.79769313e+308,  0.00000000e+000, # may vary
       -1.28000000e+002,  1.28000000e+002])
>>> np.nan_to_num(x, nan=-9999, posinf=33333333, neginf=33333333)
array([ 3.3333333e+07,  3.3333333e+07, -9.9990000e+03,
       -1.2800000e+02,  1.2800000e+02])
>>> nan = np.array([11, 12, -9999, 13, 14])
>>> posinf = np.array([33333333, 11, 12, 13, 14])
>>> neginf = np.array([11, 33333333, 12, 13, 14])
>>> np.nan_to_num(x, nan=nan, posinf=posinf, neginf=neginf)
array([ 3.3333333e+07,  3.3333333e+07, -9.9990000e+03, -1.2800000e+02,
        1.2800000e+02])
>>> y = np.array([complex(np.inf, np.nan), np.nan, complex(np.nan, np.inf)])
array([  1.79769313e+308,  -1.79769313e+308,   0.00000000e+000, # may vary
     -1.28000000e+002,   1.28000000e+002])
>>> np.nan_to_num(y)
array([  1.79769313e+308 +0.00000000e+000j, # may vary
         0.00000000e+000 +0.00000000e+000j,
         0.00000000e+000 +1.79769313e+308j])
>>> np.nan_to_num(y, nan=111111, posinf=222222)
array([222222.+111111.j, 111111.     +0.j, 111111.+222222.j])
>>> nan = np.array([11, 12, 13])
>>> posinf = np.array([21, 22, 23])
>>> neginf = np.array([31, 32, 33])
>>> np.nan_to_num(y, nan=nan, posinf=posinf, neginf=neginf)
array([21.+11.j, 12. +0.j, 13.+23.j])