numpy – 浮動小数点に関係する関数について

目次

概要

NumPy の浮動小数点に関係する関数について解説します。

numpy.around

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

numpy.around(a, decimals=0, out=None)
引数
名前 デフォルト値
a array_like
入力データ。
decimals int 0
四捨五入する小数点以下の数(デフォルト: 0)。decimalsが負の場合、小数点以下の位置の数を指定する。
返り値
名前 説明
rounded_array 丸められた値を含む a と同じ型の配列。out が指定されていない限り、新しい配列が作成されます。結果への参照が返されます。

サンプルコード

In [1]:
import numpy as np

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]
[1. 2. 5. 7.]
[1.  2.3 4.6 6.8]
[1.   2.31 4.56 6.85]

numpy.rint

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

numpy.rint(x, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "rint">
引数
名前 デフォルト値
x array_like
入力配列。
返り値
名前 説明
out 出力配列は x と同じ形・型です。x がスカラならこれはスカラです。

サンプルコード

In [ ]:
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, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "floor">
引数
名前 デフォルト値
x array_like
入力データです。
返り値
名前 説明
y x の各要素の床。x がスカラならこれはスカラです。

サンプルコード

In [ ]:
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, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "ceil">
引数
名前 デフォルト値
x array_like
入力データ。
返り値
名前 説明
y x の各要素の天井、float dtype。x がスカラならこれはスカラです。

サンプルコード

In [ ]:
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, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "trunc">
引数
名前 デフォルト値
x array_like
入力データ。
返り値
名前 説明
y x の各要素の切り捨て値。x がスカラならこれはスカラです。

サンプルコード

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

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

numpy.fix

ゼロに最も近い整数に丸めます。

numpy.fix(x, out=None)
引数
名前 デフォルト値
x array_like
丸められるフロートの配列
y ndarray
出力配列
返り値
名前 説明
out 丸められた数字の配列

サンプルコード

numpy.signbit

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

numpy.signbit(x, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "signbit">
引数
名前 デフォルト値
x array_like
入力値。
返り値
名前 説明
result 出力配列、または out が供給された場合は out への参照。x がスカラならこれはスカラです。

サンプルコード

numpy.copysign

x1 の符号部を x2 の符号部と同じにして返す。

numpy.copysign(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "copysign">
引数
名前 デフォルト値
x1 array_like
符号を変更する値。
x2 array_like
x2 の符号を x1 にコピーします。
返り値
名前 説明
out x1 の値を x2 の符号を持つ値にコピーします。x1x2 の両方がスカラならばスカラです。

サンプルコード

In [ ]:
# 浮動小数点数
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.frexp

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

numpy.frexp(x, [out1, out2, ]/, [out=(None, None), ]*, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "frexp">
引数
名前 デフォルト値
x array_like
分解する数の配列。
out1 ndarray
仮数を出力するための配列。x と同じ形でなければなりません。
out2 ndarray
指数の出力配列。x と同じ形状でなければなりません。
返り値
名前 説明
mantissa x がスカラならば、これはスカラです。
exponent 2の整数指数。 x がスカラーの場合、これはスカラーです。

サンプルコード

In [ ]:
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.ldexp

要素ごとに x1 * 2**x2 を返します。 指定した指数部と仮数部から浮動小数点数を作成する。load exponent の略。

numpy.ldexp(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "ldexp">
引数
名前 デフォルト値
x1 array_like
乗算器の配列。
x2 array_like, int
2の指数の配列。
返り値
名前 説明
y x1 * 2**x2の結果。x1x2 の両方がスカラならばスカラです。

サンプルコード

In [2]:
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]
mantissa [-0.5005    0.57825  -0.57025   0.855875]
exponent [1 2 3 3]
[-1.001  2.313 -4.562  6.847]

numpy.nextafter

x1の次の浮動小数点値をx2に向かって要素ごとに返します。 指定した方向で次に大きい浮動小数点数

numpy.nextafter(x1, x2, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "nextafter">
引数
名前 デフォルト値
x1 array_like
次の表現可能な値を探す値。
x2 array_like
x1 の次の表現可能な値を探す方向。
返り値
名前 説明
out x1 の次の表現可能な値は、x2 の方向です。x1x2 の両方がスカラならばスカラです。

サンプルコード

In [ ]:
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, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "spacing">
引数
名前 デフォルト値
x array_like
間隔を求める値
返り値
名前 説明
out x の値の間隔を求めます。x がスカラならばスカラです。

サンプルコード

In [3]:
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, [out1, out2, ]/, [out=(None, None), ]*, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "modf">
引数
名前 デフォルト値
x array_like
入力配列。
返り値
名前 説明
y1 x の分数部分。x がスカラならこれはスカラです。
y2 x の積分部分。x がスカラならば、これはスカラです。

サンプルコード

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

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

numpy.errstate

浮動小数点エラー処理のためのコンテキストマネージャ。

class numpy.errstate(**kwargs)
引数
名前 デフォルト値
kwargs {divide, over, under, invalid}
キーワード引数。有効なキーワードは、可能な浮動小数点例外です。各キーワードは、特定のエラーに対する処理を定義する文字列値を持つ必要があります。指定可能な値は {‘ignore’, ‘warn’, ‘raise’, ‘call’, ‘print’, ‘log’} です。
返り値
名前 説明

サンプルコード

In [5]:
a = np.array([1, 2, 3])
b = np.array([1, 0, 2])

with np.errstate(divide="ignore"):
    divided = a / b

numpy.geterr

浮動小数点エラーの現在の処理方法を取得します。

numpy.geterr()
引数
名前 デフォルト値
res dict
キー “divide”、”over”、”under”、”invalid” を持つ辞書で、その値は文字列 “ignore”、”print”、”log”、”warning”、”raise”、”call” からのものです。キーは可能な浮動小数点の例外を表し、値はこれらの例外がどのように処理されるかを定義します。
返り値
名前 説明

サンプルコード

In [6]:
print(np.geterr())
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}

numpy.geterrcall

浮動小数点エラーで使用される現在のコールバック関数を返します。

numpy.geterrcall()
引数
名前 デフォルト値
errobj callable, log instance None
現在のエラーハンドラ。seterrcall でハンドラが設定されていない場合は None が返されます。
返り値
名前 説明

サンプルコード

In [7]:
def on_error(msg, code):
    print(f"error: {msg}, code: {code}")


np.seterrcall(on_error)

a = np.array([1, 2, 3])
b = np.array([1, 0, 2])
c = a / b

with np.errstate(divide="call"):
    divided = a / b
<function on_error at 0x7eff2c036790>
error: divide by zero, code: 1
<ipython-input-23-ba58b2aa3890>:9: RuntimeWarning: divide by zero encountered in true_divide c = a / b

numpy.geterrobj

浮動小数点エラー処理を定義する現在のオブジェクトを返します。

numpy.geterrobj()
引数
名前 デフォルト値
errobj list
エラーオブジェクトは、3つの要素を含むリストです。内部 numpy バッファサイズ、エラーマスク、エラーコールバック関数]の3つの要素を含むリストです。
返り値
名前 説明

サンプルコード

In [8]:
def print_err_mask(mask):
    err_types = ["invalid", "under", "over", "divide"]
    err_modes = {0: "ignore", 1: "warn", 2: "raise", 3: "call", 4: "print", 5: "log"}
    for i, mode in enumerate(np.base_repr(mask, 8)):
        print(f"{err_types[i]:>8}: {err_modes[int(mode)]}")


buf_size, err_mask, callback = np.geterrobj()
print_err_mask(err_mask)
 invalid: warn
   under: ignore
    over: warn
  divide: warn

numpy.seterr

浮動小数点エラーの処理方法を設定します。

numpy.seterr(all=None, divide=None, over=None, under=None, invalid=None)
引数
名前 デフォルト値
all {“ignore”, “warn”, “raise”, “call”, “print”, “log”} None
すべての種類の浮動小数点エラーを一度に処理するように設定します。
divide {“ignore”, “warn”, “raise”, “call”, “print”, “log”} None
ゼロ除算の処理。
over {“ignore”, “warn”, “raise”, “call”, “print”, “log”} None
浮動小数点オーバーフロー処理
under {“ignore”, “warn”, “raise”, “call”, “print”, “log”} None
浮動小数点アンダーフロー処理
invalid {“ignore”, “warn”, “raise”, “call”, “print”, “log”} None
浮動小数点演算が無効な場合の処理
返り値
名前 説明
old_settings 旧設定を含む辞書。

サンプルコード

In [9]:
np.seterr(all="ignore")
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}

numpy.seterrcall

浮動小数点エラー時のコールバック関数またはログオブジェクトの設定。

numpy.seterrcall(func)
引数
名前 デフォルト値
func callable f(err, flag) object with write method
浮動小数点エラー時に呼び出す関数(‘call’-mode)、またはそのメッセージをログに記録するために’write’メソッドを使用するオブジェクト(‘log’-mode)。
返り値
名前 説明
h 以前のエラーハンドラ。

サンプルコード

In [10]:
def on_error(msg, code):
    print(f"error: {msg}, code: {code}")


np.seterrcall(on_error)

a = np.array([1, 2, 3])
b = np.array([1, 0, 2])
c = a / b

with np.errstate(divide="call"):
    divided = a / b
error: divide by zero, code: 1

numpy.seterrobj

浮動小数点エラー処理を定義するオブジェクトを設定します。

numpy.seterrobj(errobj)
引数
名前 デフォルト値
errobj list
エラーオブジェクトは、3つの要素を含むリストです。エラーオブジェクトは、[内部numpyバッファサイズ、エラーマスク、エラーコールバック関数]の3つの要素を含むリストです。
返り値
名前 説明

サンプルコード

In [11]:
def err_handler(type, flag):
    print("Floating point error (%s), with flag %s" % (type, flag))

err_obj = [20000, 12, callback]
print_err_mask(12)

np.seterrobj(err_obj)
 invalid: warn
   under: print

コメント

コメントする

目次