note.nkmk.me

Jupyter Notebookの表示桁数(精度)を設定する%precision

Date: 2018-10-31 / tags: Jupyter Notebook

Jupyter Notebook(IPython Notebook)では、マジックコマンド%precisionで浮動小数点数の小数点以下の表示桁数(精度)を設定できる。

小数点以下の桁数を整数で指定するほか、フォーマット文字列でも指定可能。

%precisionの設定は浮動小数点数float型のオブジェクトだけでなく、numpy.ndarrayに対しても作用する。pandas.DataFrameに対しては作用しない。

なお、%precisionはIPythonで実装されているマジックコマンド。実装されていない限り他のカーネルでは使えない。

ここでは以下の内容について説明する。

  • %precisionの使い方
    • 整数値で小数点以下の桁数を指定
    • フォーマット文字列を使用
    • デフォルトに戻す
  • numpy.ndarrayにも作用する
  • pandas.DataFrameには作用しない

便宜上、以下のサンプルコードはipynbpyに変換したものを掲載する。そのままPythonのスクリプトとして実行しても動かないので注意。

ipynbは以下のリンクを参照。

スポンサーリンク

%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は以下のリンクを参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事