NumPy配列の表示形式を自在に操る!桁数、指数表記、0埋めなどを設定


 

Pythonで数値計算やデータ分析を行う上で、NumPyは非常に強力なツールです。NumPyのndarrayは大量のデータを効率的に扱えますが、その表示形式はデフォルトだと物足りなく感じることもあります。特に、数値の桁数、小数点以下の精度、指数表記の有無、さらにはゼロ埋めなど、表示形式を細かく制御したい場面は多いでしょう。

この記事では、NumPy配列の表示形式を自由にカスタマイズする方法について、具体的な例を交えながら詳しく解説します。


 

NumPyの表示形式を制御する基本

 

NumPy配列の表示形式を制御するには、主にnp.set_printoptions()関数を使用します。この関数には様々な引数があり、それぞれが表示形式の異なる側面を制御します。

 

precisionで小数点以下の桁数を指定

 

precision引数は、浮動小数点数の小数点以下の桁数を指定します。デフォルト値は8です。

Python
 
import numpy as np

# デフォルトの表示
arr_float = np.array([0.123456789, 123.456789])
print("デフォルト:", arr_float)

# 小数点以下3桁に設定
np.set_printoptions(precision=3)
print("precision=3:", arr_float)

# 設定をリセット
np.set_printoptions()

出力例:

デフォルト: [  0.12345679 123.456789  ]
precision=3: [  0.123 123.457]

 

指数表記と固定小数点表記の切り替え

 

数値が非常に大きい、または非常に小さい場合、NumPyは自動的に指数表記(例: 1.23e+05)を使用することがあります。この挙動はsuppress引数とformatter引数で制御できます。

 

suppressで指数表記を抑制する

 

suppress引数をTrueに設定すると、NumPyは可能な限り指数表記を避け、固定小数点表記で表示しようとします。

Python
 
import numpy as np

# 大きな数値の配列
large_arr = np.array([1.234567e-10, 9.87654e+10])
print("デフォルト(指数表記):", large_arr)

# suppress=Trueで指数表記を抑制
np.set_printoptions(suppress=True, precision=15) # precisionも調整
print("suppress=True:", large_arr)

np.set_printoptions()

出力例:

デフォルト(指数表記): [1.234567e-10 9.876540e+10]
suppress=True: [    0.000000000123457 98765400000.         ]

suppress=Trueにした場合でも、桁数が非常に大きくなると、表示領域の制約などから指数表記になることがあります。

 

formatterで詳細な書式設定を行う

 

formatter引数を使用すると、NumPy配列内の各要素の表示形式を辞書形式で非常に詳細に指定できます。特に浮動小数点数('float_kind')の書式設定によく使われます。Pythonのf-stringやstr.format()で使用する書式指定ミニ言語と同じルールが適用されます。

Python
 
import numpy as np

arr_val = np.array([123.4567, 0.00000789, -987.6])

# 浮動小数点数を指定の書式で表示
# ':8.2f'  => 全体で8文字、小数点以下2桁の固定小数点表記
# ':.4e'  => 指数表記で小数点以下4桁
np.set_printoptions(formatter={'float_kind': '{:8.2f}'.format})
print("小数点以下2桁固定:", arr_val)

np.set_printoptions(formatter={'float_kind': '{:.4e}'.format})
print("指数表記(小数点以下4桁):", arr_val)

# ゼロ埋め表示の例
# ':08.2f' => 全体で8文字、小数点以下2桁、足りない部分は0で埋める
np.set_printoptions(formatter={'float_kind': '{:08.2f}'.format})
print("0埋め表示:", arr_val)

np.set_printoptions() # 設定をリセット

出力例:

小数点以下2桁固定: [ 123.46    0.00 -987.60]
指数表記(小数点以下4桁): [1.2346e+02 7.8900e-06 -9.8760e+02]
0埋め表示: [00123.46 00000.00 -0987.60]

formatter'int_kind' (整数)、'str_kind' (文字列)、'all' (全ての型) など、様々なキーに対して書式を設定できます。


 

その他の表示設定オプション

 

 

linewidthで行の最大文字数を指定

 

linewidth引数は、NumPy配列が一行に表示される最大文字数を設定します。これを超えると、配列は改行されて表示されます。デフォルト値は75です。

Python
 
import numpy as np

long_arr = np.arange(20)

# linewidth=30 に設定
np.set_printoptions(linewidth=30)
print("linewidth=30:", long_arr)

np.set_printoptions()

出力例:

linewidth=30: [ 0  1  2  3  4  5  6  7  8
  9 10 11 12 13 14 15 16 17 18 19]

 

nanstrinfstrでNaNやInfの表示を変更

 

NumPy配列には、欠損値を示すNaN(Not a Number)や無限大を示すinf(Infinity)が含まれることがあります。これらの表示文字列もカスタマイズできます。

Python
 
import numpy as np

# NaNとInfを含む配列
nan_inf_arr = np.array([np.nan, np.inf, -np.inf])

# デフォルトの表示
print("デフォルト:", nan_inf_arr)

# 表示文字列を変更
np.set_printoptions(nanstr='欠損', infstr='無限')
print("変更後:", nan_inf_arr)

np.set_printoptions()

出力例:

デフォルト: [ nan  inf -inf]
変更後: [ 欠損   無限  -無限]

 

まとめと使い分け

 

np.set_printoptions()を使うことで、NumPy配列の表示を細かく制御し、データの可視性を高めることができます。

  • precision: 浮動小数点数の小数点以下の桁数を調整したい場合。

  • suppress: 指数表記を避け、固定小数点表記で表示したい場合。

  • formatter: 特定のデータ型(特に浮動小数点数)の表示形式を、f-stringのような詳細な書式指定で制御したい場合や、ゼロ埋めなどの特殊な表示を行いたい場合。

  • linewidth: 配列の表示が長すぎるときに改行を制御したい場合。

  • nanstr, infstr: NaNinfの表示を分かりやすくしたい場合。

これらのオプションを使いこなすことで、デバッグ作業やデータ確認の効率が格段に向上するでしょう。プロジェクトや分析の目的に合わせて、最適な表示形式をぜひ見つけてくださいね。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座