FORMAT COMPARISON
NPY vs NPZ
NPYは1つの配列とdtype・shapeを保存します。NPZは複数のNPYをZIPにまとめ、名前で配列を取り出せます。
NPYとNPZ、どちらを選ぶ?
単一配列や数値配列のメモリマップにはNPY、複数配列をまとめて渡すにはNPZを選びます。 配列数だけでなく読み込み範囲と圧縮コストで選びます。object dtypeのpickleを信頼できないファイルで許可しないでください。
NPY向き
単一のNumPy配列を型やshapeとともにバイナリ保存する・NumPy対応の科学計算や機械学習処理へ配列を受け渡す
- 単一配列をテキスト変換せずdtypeとshapeを維持して保存する
- 対応する非object配列をメモリマップ等で部分アクセスする
NPZ向き
複数のNumPy配列を一つのZIPアーカイブにまとめる・名前付き配列をNumPyの科学計算処理間で受け渡す
- 複数の配列を一つのファイルに保存する
- 用途に応じてZIP内の配列を非圧縮または圧縮で保存する
基本情報を比較
NPYとNPZの主な違いを確認できます。
| 項目 | NPY | NPZ |
|---|---|---|
| 拡張子 | .npy | .npz |
| MIME Type | application/octet-stream | application/zip |
| 主な用途 | 単一のNumPy配列を型やshapeとともにバイナリ保存する・NumPy対応の科学計算や機械学習処理へ配列を受け渡す | 複数のNumPy配列を一つのZIPアーカイブにまとめる・名前付き配列をNumPyの科学計算処理間で受け渡す |
| 圧縮 | none | 任意の可逆圧縮 |
| 開く方法 | NumPyの`load`またはNPY対応ツールで開き、dtype、shape、形式バージョンを確認します。大きな配列を部分的に扱う場合はメモリマップ対応と配列の保存方法を確認してください。 | NumPy `load`またはNPZ対応ツールで開き、含まれる配列名を確認して必要な配列を読み込みます。`NpzFile`を返すAPIでは利用後に閉じ、object dtypeを含む可能性のある不明なファイルではpickle設定を確認してください。 |
| 書き出し・変換 | NumPyの`save`で配列を保存します。CSV等から変換するときは数値型、byte order、shape、欠損値の表し方を変換前後で比較します。object dtypeを含む配列を扱う場合はpickleを有効にする必要があるかを確認し、信頼できないファイルで安易に有効化しないでください。 | 複数配列を`savez`または`savez_compressed`で保存します。非圧縮とDEFLATE圧縮のどちらを使ったか、配列名、dtype、shapeを受け渡し先と確認します。変換後に含まれる配列と値を照合してください。 |
用途別の選び方
作りたいものや使う場面から選べます。
単一配列をテキスト変換せずdtypeとshapeを維持して保存する
単一のNumPy配列を型やshapeとともにバイナリ保存する・NumPy対応の科学計算や機械学習処理へ配列を受け渡す
NPY向き対応する非object配列をメモリマップ等で部分アクセスする
単一のNumPy配列を型やshapeとともにバイナリ保存する・NumPy対応の科学計算や機械学習処理へ配列を受け渡す
NPY向き複数の配列を一つのファイルに保存する
複数のNumPy配列を一つのZIPアーカイブにまとめる・名前付き配列をNumPyの科学計算処理間で受け渡す
NPZ向き用途に応じてZIP内の配列を非圧縮または圧縮で保存する
複数のNumPy配列を一つのZIPアーカイブにまとめる・名前付き配列をNumPyの科学計算処理間で受け渡す
NPZ向き確認ポイント 1
NPYの基本単位は1つの配列です。 NPZは配列ごとのNPYを格納するアーカイブです。
使い分け確認ポイント 2
savezは非圧縮、savez_compressedはDEFLATEを使用します。NPZ拡張子だけでは圧縮の有無は分かりません。
使い分け選ぶ理由を詳しく
- 数値NPYはメモリマップできますが、object配列は対象外です。通常のnumpy.loadでNPZメンバーを同様にメモリマップできるとは考えないでください。
よくある質問
NPZは常にNPYより小さくなりますか?
いいえ。配列の内容、圧縮設定、ZIPの付加情報によって変わります。実データで容量と読み込み時間を測ってください。