ファイル入出力

1. 学習内容



2. 主要な概念

(1) .npy 形式

PYTHON
import numpy as np

a = np.array([1, 2, 3, 4, 5])

# Save
np.save('array.npy', a)

# Load
b = np.load('array.npy')
print(b)  # [1 2 3 4 5]

(2) .npz 形式(複数の配列)

PYTHON
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

# Save multiple arrays
np.savez('data.npz', x=x, y=y)

# Load
data = np.load('data.npz')
print(data['x'])  # [1 2 3]
print(data['y'])  # [4 5 6]

(3) CSV/テキストファイル

PYTHON
# Save to CSV
data = np.array([[1, 2, 3],
                 [4, 5, 6]])
np.savetxt('data.csv', data, delimiter=',', fmt='%.2f')

# Load from CSV
loaded = np.loadtxt('data.csv', delimiter=',')

(1) ▶ サンプル:.npy ファイルの保存と読み込み(難易度 ⭐)

PYTHON
import numpy as np
import os

# Create and save an array
a = np.array([1, 2, 3, 4, 5])
np.save('example.npy', a)

# Load it back
b = np.load('example.npy')
print("Loaded:", b)
print("Same data:", np.array_equal(a, b))

# Clean up
os.remove('example.npy')

出力:

TEXT
読み込み中:[1 2 3 4 5]
同じデータ:True

(2) ▶ サンプル:CSVファイルの入出力(難易度 ⭐⭐)

PYTHON
import numpy as np
import os

data = np.array([[1.5, 2.3, 3.7],
                 [4.1, 5.6, 6.2],
                 [7.8, 8.4, 9.9]])

# Save to CSV
np.savetxt('data.csv', data, delimiter=',', fmt='%.2f',
           header='x,y,z', comments='')

# Load from CSV
loaded = np.loadtxt('data.csv', delimiter=',')
print("Loaded CSV:\n", loaded)

# Load specific columns
col_0 = np.loadtxt('data.csv', delimiter=',', usecols=0)
print("First column:", col_0)

os.remove('data.csv')

出力:

TEXT
読み込んだCSV:
 [[1.5 2.3 3.7]
 [4.1 5.6 6.2]
 [7.8 8.4 9.9]]
1列目:[1.5 4.1 7.8]

(3) ▶ サンプル:.npz ファイルの取り扱い(難易度 ⭐⭐)

PYTHON
import numpy as np
import os

x = np.linspace(0, 10, 100)
y = np.sin(x)
z = np.cos(x)

# Save multiple arrays
np.savez('trig.npz', x=x, y=y, z=z)

# Load and access by name
data = np.load('trig.npz')
print("Keys:", list(data.keys()))
print("x[:5]:", data['x'][:5])
print("y[:5]:", data['y'][:5])

os.remove('trig.npz')

出力:

TEXT
キー:['x', 'y', 'z']
x[:5]: [0. 0.1010101  0.2020202  0.3030303  0.4040404]
y[:5]: [0. 0.10083842 0.20064886 0.2984138  0.3931366]


❓ よくある質問

Q .npy形式のCSV形式に対する利点は何ですか?
A .npy形式はdtypeを正確に保持し、読み書きが高速で、ディスク容量も少なくて済みます。CSV形式は人間が読みやすく移植性にも優れていますが、処理速度が遅く、dtype情報が失われます。
Q メモリマップド配列とは何ですか?
A np.load('file.npy', mmap_mode='r') はファイルをメモリマップド配列として読み込みます。つまり、ファイル全体を一度にメモリに読み込むわけではありません。RAMの容量を超えるデータセットを扱う際に便利です。
Q CSV ファイルの欠損値はどのように処理すればよいですか?
A np.genfromtxtfilling_values パラメータを指定して、欠損エントリのデフォルト値を指定してください。

📖 まとめ



📝 練習問題

  1. 初心者向け(難易度 ⭐):配列を作成し、.npy および .csv 形式で保存した後、両方を読み込み、読み込まれた値を比較してください。

  2. 中級(難易度 ⭐⭐):3つの配列を作成し、それらを1つの.npzファイルに保存してから読み込み、各配列が正しく復元されていることを確認してください。

  3. 上級(難易度 ⭐⭐⭐):大きな配列(1000×1000)を作成し、.npy として保存してから、mmap_mode='r' を使って読み込んでください。 その配列の1つの要素にアクセスし、大規模なデータセットにおいて、この方法がなぜメモリ効率に優れているかを説明してください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%