Jupyter Notebookの表示桁数(精度)を設定する%precision
Jupyter Notebook(IPython Notebook)では、マジックコマンド%precision
で浮動小数点数の小数点以下の表示桁数(精度)を設定できる。
小数点以下の桁数を整数で指定するほか、フォーマット文字列でも指定可能。
%precision
の設定は浮動小数点数float
型のオブジェクトだけでなく、numpy.ndarray
に対しても作用する。pandas.DataFrame
に対しては作用しない。
なお、%precision
はIPythonで実装されているマジックコマンド。実装されていない限り他のカーネルでは使えない。
ここでは以下の内容について説明する。
%precision
の使い方- 整数値で小数点以下の桁数を指定
- フォーマット文字列を使用
- デフォルトに戻す
numpy.ndarray
にも作用するpandas.DataFrame
には作用しない
便宜上、以下のサンプルコードはipynb
をpy
に変換したものを掲載する。そのままPythonのスクリプトとして実行しても動かないので注意。
ipynb
は以下のリンクを参照。
- python-snippets/jupyter_precision.ipynb · nkmk/python-snippets
- python-snippets/jupyter_precision_numpy.ipynb · nkmk/python-snippets
- python-snippets/jupyter_precision_pandas.ipynb · nkmk/python-snippets
%precisionの使い方
整数値で小数点以下の桁数を指定
%precision 整数値
で、小数点以下の桁数を指定できる。
f = 123.456789
f
# 123.456789
%precision 3
# '%.3f'
f
# 123.457
print()
で出力する場合、%precision
の設定は効かないので注意。
print(f)
# 123.456789
Pythonの組み込み関数round()
やformat()
での処理と同じく、丸めの方式は偶数への丸め。四捨五入ではない。
%precision 0
# '%.0f'
0.4
# 0
0.5
# 0
0.6
# 1
フォーマット文字列を使用
フォーマット文字列で表示形式を指定することも可能。指数表記やゼロ埋めなどの指定ができる。
%precision %.4e
# '%.4e'
f
# 1.2346e+02
%precision %08.2f
# '%08.2f'
f
# 00123.46
フォーマット文字列については以下の記事を参照。
なお、%precision
で指定したフォーマット文字列は浮動小数点数float
型にのみ適用される。整数int
型に対するフォーマット文字列は指定できない。
デフォルトに戻す
%precision
のみを実行するとデフォルトの設定に戻る。
%precision
# '%r'
f
# 123.456789
ここまでのコードのipynb
は以下のリンクを参照。
numpy.ndarrayにも作用する
%precision 整数値
による小数点以下の桁数指定はnumpy.ndarray
にも効く。
import numpy as np
a = np.array([0.123456789, 0.987654321])
a
# array([0.12345679, 0.98765432])
%precision 3
# '%.3f'
a
# array([0.123, 0.988])
上述の浮動小数点数float
型のオブジェクトと異なり、print()
での出力にも効く。
print(a)
# [0.123 0.988]
これは、%precision 整数値
によってNumPyの表示設定printoptions
が更新されているから。np.get_printoptions()
で確認できる。
print(np.get_printoptions()['precision'])
# 3
%precision 整数値
はnp.set_printoptions(precision=整数値)
と同じ。
np.set_printoptions(precision=5)
a
# array([0.12346, 0.98765])
print(a)
# [0.12346 0.98765]
NumPyの表示設定についての詳細は以下の記事を参照。
あくまでも表示の設定なので、実際の値は丸められていない。
print(a[0])
# 0.123456789
%precision
のみを実行するとデフォルトに戻る。
%precision
# '%r'
a
# array([0.12345679, 0.98765432])
print(np.get_printoptions()['precision'])
# 8
numpy.ndarray
に対する%precision
でのフォーマット文字列の指定はできない。フォーマット文字列を指定したい場合はnp.set_printoptions()
を使う。
%precision %.2e
# '%.2e'
a
# array([0.12345679, 0.98765432])
np.set_printoptions(formatter={'float': '{:.2e}'.format})
a
# array([1.23e-01, 9.88e-01])
ipynb
は以下のリンクを参照。
pandas.DataFrameには作用しない
以下のpandas.DataFrame
を例とする。
import pandas as pd
df = pd.DataFrame({'a': [0.123456789], 'b': [0.987654321]})
df
# a b
# 0 0.123457 0.987654
pandas.DataFrame
の表示設定はpd.options.display
で変更する。
小数点以下の桁数はpd.options.display.precision
で設定し、この例の環境ではデフォルトが6
。
%precision
の設定は効かず、デフォルトのまま変わらない。
print(pd.options.display.precision)
# 6
%precision 3
# '%.3f'
print(pd.options.display.precision)
# 6
df
# a b
# 0 0.123457 0.987654
pd.options.display.precision
を変更すればJupyter Notebook(IPython)の出力もprint()
の出力もそれに従うので、そちらを使って設定する。
pd.options.display.precision = 3
df
# a b
# 0 0.123 0.988
print(df)
# a b
# 0 0.123 0.988
ipynb
は以下のリンクを参照。