概要
NumPy の浮動小数点に関係する関数について解説します。
numpy.around
最近接丸めで指定した桁数の数値にする。
numpy.around(a, decimals=0, out=None)
名前 | 型 | デフォルト値 |
---|---|---|
a | array_like | |
入力データ。 | ||
decimals | int | 0 |
四捨五入する小数点以下の数(デフォルト: 0)。decimalsが負の場合、小数点以下の位置の数を指定する。 |
名前 | 説明 |
---|---|
rounded_array | 丸められた値を含む a と同じ型の配列。out が指定されていない限り、新しい配列が作成されます。結果への参照が返されます。 |
サンプルコード
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 がスカラならこれはスカラです。 |
サンプルコード
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 がスカラならこれはスカラです。 |
サンプルコード
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 がスカラならこれはスカラです。 |
サンプルコード
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 がスカラならこれはスカラです。 |
サンプルコード
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 の符号を持つ値にコピーします。x1 と x2 の両方がスカラならばスカラです。 |
サンプルコード
# 浮動小数点数
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 がスカラーの場合、これはスカラーです。 |
サンプルコード
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の結果。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]
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 の方向です。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, /, out=None, *, where=True, casting="same_kind", order="K", dtype=None, subok=True[, signature, extobj]) = <ufunc "spacing">
名前 | 型 | デフォルト値 |
---|---|---|
x | array_like | |
間隔を求める値 |
名前 | 説明 |
---|---|
out | x の値の間隔を求めます。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, [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 がスカラならば、これはスカラです。 |
サンプルコード
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’} です。 |
名前 | 説明 |
---|
サンプルコード
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” からのものです。キーは可能な浮動小数点の例外を表し、値はこれらの例外がどのように処理されるかを定義します。 |
名前 | 説明 |
---|
サンプルコード
print(np.geterr())
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
numpy.geterrcall
浮動小数点エラーで使用される現在のコールバック関数を返します。
numpy.geterrcall()
名前 | 型 | デフォルト値 |
---|---|---|
errobj | callable, log instance None | |
現在のエラーハンドラ。seterrcall でハンドラが設定されていない場合は None が返されます。 |
名前 | 説明 |
---|
サンプルコード
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
numpy.geterrobj
浮動小数点エラー処理を定義する現在のオブジェクトを返します。
numpy.geterrobj()
名前 | 型 | デフォルト値 |
---|---|---|
errobj | list | |
エラーオブジェクトは、3つの要素を含むリストです。内部 numpy バッファサイズ、エラーマスク、エラーコールバック関数]の3つの要素を含むリストです。 |
名前 | 説明 |
---|
サンプルコード
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 | 旧設定を含む辞書。 |
サンプルコード
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 | 以前のエラーハンドラ。 |
サンプルコード
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つの要素を含むリストです。 |
名前 | 説明 |
---|
サンプルコード
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
コメント