Pynote

Python、機械学習、画像処理について

numpy - 浮動小数点数関係の関数 まとめ

丸め

名前 説明
numpy.around 指定した桁数に最近接丸め
numpy.rint 最近接丸めで整数にする。
numpy.floor 負の無限大への丸めで整数にする。床関数。\lfloor x \rfloor
numpy.ceil 正の無限大への丸めで整数にする。天井関数。 \lceil x \rceil
numpy.trunc 0への丸めで整数にする。

numpy.around

最近接丸めで指定した桁数の数値にする。

関数

numpy.around(a, decimals=0, out=None)
a = np.array([1.001, 2.313, 4.562, 6.847])

# 整数 (小数点以下0桁) に最近接丸め
b = np.around(a)
print(b)  # [1. 2. 5. 7.]

# 小数点以下2桁に最近接丸め
b = np.around(a, decimals=1)
print(b)  # [1.  2.3 4.6 6.8]

# 小数点以下2桁に最近接丸め
b = np.around(a, decimals=2)
print(b)  # [1.   2.31 4.56 6.85]

numpy.rint

最近接丸めで整数にする。

関数

numpy.rint(x)

a = np.array([1.001, 2.313, 4.562, 6.847])

# 最近接丸めで整数にする。
b = np.rint(a)
print(b)  # [1. 2. 5. 7.]

numpy.floor

負の無限大への丸めで整数にする。床関数。

関数

numpy.floor(x)

a = np.array([-1.001, 2.313, -4.562, 6.847])

# 負の無限大への丸めで整数にする。床関数。
b = np.floor(a)
print(b)  # [-2.  2. -5.  6.]

numpy.ceil

正の無限大への丸めで整数にする。天井関数。

関数

numpy.ceil(x)

a = np.array([-1.001, 2.313, -4.562, 6.847])

# 正の無限大への丸めで整数にする。天井関数。
b = np.ceil(a)
print(b)  # [-1.  3. -4.  7.]

numpy.trunc

0への丸めで整数にする。

関数

numpy.trunc(x)

a = np.array([-1.001, 2.313, -4.562, 6.847])

# 0の丸めで整数にする。
b = np.trunc(a)
print(b)  # [-1.  2. -4.  6.]

浮動小数点数の扱い

pynote.hatenablog.com

名前 説明
numpy.signbit 浮動小数点数の符号部のビットが0の場合は False、1の場合は True を返す。
numpy.copysign x1 の符号部を x2 の符号部と同じにして返す。
numpy.frexp 浮動小数点数を指数部と仮数部に分解する。
numpy.ldexp 指定した指数部と仮数部から浮動小数点数を作成する。
numpy.nextafter 指定した方向で次に大きい浮動小数点数
numpy.spacing 指定した値とそれに最も近い浮動小数点数の距離
numpy.modf 浮動小数点数を整数部と小数部に分解する。

numpy.signbit

浮動小数点数の符号部のビットが0の場合は False、1の場合は True を返す。

関数

numpy.signbit(x)

# 浮動小数点数
a = np.signbit([-1.001, 2.313, -4.562, 6.847])
print(a)  # [ True False  True False]

# 特殊な数 (0, 無限、NaN)
a = np.signbit([+0., -0., +np.inf, -np.inf, +np.nan, -np.nan])
print(a)  # [False False False  True False  True]

numpy.copysign

x1 の符号部を x2 の符号部と同じにした配列を返す。

関数

numpy.copysign(x1, x2)

a = np.array([1.2, 4.6, 4.2, -3.6])
b = np.array([-1.001, 2.313, -4.562, 6.847])

# a の符号部を b の符号部と同じにする。
c = np.copysign(a, b)
print(c)  # [-1.2  4.6 -4.2  3.6]

numpy.frexp

浮動小数点数を指数部と仮数部に分解する。
fraction and exponent の略。

関数

numpy.frexp(x)

numpy.ldexp

指定した指数部と仮数部から浮動小数点数を作成する。
load exponent の略。

関数

numpy.ldexp(x1, x2)

a = np.array([-1.001, 2.313, -4.562, 6.847])

# 浮動小数点数を仮数部、指数部に分解する。
mantissa, exponent = np.frexp(a)
print('mantissa', mantissa)  # mantissa [-0.5005    0.57825  -0.57025   0.855875]
print('exponent', exponent)  # exponent [1 2 3 3]

# 仮数部、指数部から浮動小数点数を作成する。
b = np.ldexp(mantissa, exponent)
print(b)  # [-1.001  2.313 -4.562  6.847]

numpy.nextafter

x2 の方向にある x1 の隣の浮動小数点数を返す。

関数

numpy.nextafter(x1, x2)

a = np.array([0, 1.1, 2.4, 32.1])

# 正の無限大方向で次に大きい浮動小数点数
b = np.nextafter(a, np.inf)
print(b)  # [4.94e-324 1.10e+000 2.40e+000 3.21e+001]

# 負の無限大方向で次に大きい浮動小数点数
b = np.nextafter(a, -np.inf)
print(b)  # [-4.94e-324  1.10e+000  2.40e+000  3.21e+001]

numpy.spacing

指定した値 x とそれに最も近い浮動小数点数の距離を返す。

関数

numpy.spacing(x)

a = np.array([0, 1.1, 2.4, 32.1])

b = np.spacing(a)
print(b)  # [4.94065646e-324 2.22044605e-016 4.44089210e-016 7.10542736e-015]

numpy.modf

浮動小数点数を整数部と小数部に分解する。

関数

numpy.modf(x)

a = np.array([-1.001, 2.313, -4.562, 6.847])

fraction, interger = np.modf(a)
print('integral part', interger)  # integral part [-1.  2. -4.  6.]
print('fractional part', fraction)  # fractional part [-0.001  0.313 -0.562  0.847]

無限、NaN かどうかを判定する。

名前 説明
numpy.isneginf f(x) = \left\{
\begin{array}{ll}
True & (x = -\infty) \\
False & otherwise\end{array}
\right.
numpy.isposinf f(x) = \left\{
\begin{array}{ll}
True & (x = +\infty) \\
False & otherwise\end{array}
\right.
numpy.isinf f(x) = \left\{
\begin{array}{ll}
True & (x = \pm \infty) \\
False & otherwise\end{array}
\right.
numpy.isfinite f(x) = \left\{
\begin{array}{ll}
True & (x \ne \pm \infty, NaN) \\
False & otherwise\end{array}
\right.
numpy.isnan f(x) = \left\{
\begin{array}{ll}
True & (x = NaN) \\
False & otherwise\end{array}
\right.

numpy.isneginf

値が負の無限大かどうかを判定する。
is negative infinity の略。

関数

numpy.isneginf(x, out=None)

numpy.isposinf

値が正の無限大かどうかを判定する。
is positive infinity の略。

関数

numpy.isposinf(x, out=None)

numpy.isinf

値が負または正の無限大かどうかを判定する。

関数

numpy.isinf(x)

numpy.isfinite

値が有限かどうかを判定する。

関数

numpy.isfinite(x)

numpy.isnan

値が NaN かどうかを判定する。

関数

numpy.isnan(x)

a = np.array([1.2, -3.1, np.inf, -np.inf, np.nan, -np.nan])

# 負の無限大かどうか
print(np.isneginf(a))  # [False False False  True False False]

# 正の無限大かどうか
print(np.isposinf(a))  # [False False  True False False False]

# 無限大かどうか
print(np.isinf(a))  # [False False  True  True False False]

# 有限の値かどうか
print(np.isfinite(a))  # [ True  True False False False False]

# NaN かどうか
print(np.isnan(a))  # [False False False False  True  True]