Berkas .npy yang dihasilkan np.save hanya berguna jika kita bisa memuatnya kembali dengan tepat. Fungsi np.load adalah pintu masuknya: beri nama berkas, dan NumPy membaca header untuk merekonstruksi array dengan bentuk dan tipe data yang sama persis seperti saat disimpan. Presisi ini yang membedakan np.load dari membaca teks biasa, di mana kita harus menebak formatnya sendiri.

Bab ini membahas pemakaian dasar np.load, bukti pelestarian bentuk dan dtype untuk berbagai jenis array, serta perilaku khusus ketika berkas yang dimuat bukan .npy melainkan arsip .npz. Semua contoh memakai berkas yang dibuat di awal blok kode yang sama, sehingga setiap blok dapat dicoba langsung dari direktori kosong.

Memuat dengan np.load #

Pola paling umum: simpan pada satu kesempatan, muat pada kesempatan lain. Dalam satu skrip uji kita lakukan keduanya berurutan agar hasilnya dapat diamati:

python
import numpy as np

suhu = np.array([27.5, 28.1, 26.9, 30.2])
np.save("suhu.npy", suhu)
hasil = np.load("suhu.npy")
print(type(hasil))
print(hasil)
print(hasil.dtype, hasil.shape)

Output yang Dihasilkan:

text
<class 'numpy.ndarray'>
[27.5 28.1 26.9 30.2]
float64 (4,)

Mari kita bedah:

  1. Baris 3-4: array dibuat lalu disimpan dengan np.save seperti pada bab sebelumnya.
  2. Baris 5 (np.load("suhu.npy")): NumPy membaca magic number berkas, menguraikan header, lalu mengalokasikan ndarray baru berisi data biner yang dibaca.
  3. Baris 6-8: hasilnya adalah numpy.ndarray biasa — bukan objek khusus — dengan nilai, dtype float64, dan shape (4,) yang identik dengan array asalnya.

Perlu dicatat bahwa array hasil np.load adalah salinan mandiri di memori: variabel hasil tidak lagi terhubung dengan suhu.npy. Mengubah hasil di kemudian sesi hanya mengubah memori; berkasnya tetap utuh sampai kita menuliskannya kembali dengan np.save. Pola berpikir yang berlaku sama seperti menyalin array biasa, dan bila kita justru ingin membaca berkas tanpa menyalin seluruh isinya, opsi mmap_mode pada np.load menjadi jembatannya — dibahas pada Chapter Memory-mapped Array.

Bentuk dan Tipe Data Dipelestarkan #

Janji utama format .npy adalah pelestarian mutlak: apa pun dtype dan bentuknya, array yang dimuat identik dengan yang disimpan. Kita bisa membuktikannya untuk tiga keluarga dtype sekaligus:

python
import numpy as np

nilai_ujian = np.array([[80, 75, 90], [70, 85, 95]], dtype=np.int64)
nama = np.array(["Budi", "Siti", "Dewi"])
aktif = np.array([True, False, True])
for arr, nama_file in [(nilai_ujian, "nilai.npy"),
                       (nama, "nama.npy"),
                       (aktif, "aktif.npy")]:
    np.save(nama_file, arr)
    b = np.load(nama_file)
    print(nama_file, b.dtype, b.shape, np.array_equal(arr, b))

Output yang Dihasilkan:

text
nilai.npy int64 (2, 3) True
nama.npy <U4 (3,) True
aktif.npy bool (3,) True

Penjelasan tiap bagian:

  1. Baris 3-5: tiga array dengan dtype berbeda disiapkan — integer 2-D, string Unicode 1-D, dan boolean 1-D.
  2. Baris 6-9 (loop for): setiap array disimpan, dimuat kembali, lalu dicatat dtype, shape, dan kesamaan isinya melalui np.array_equal.
  3. Baris keluaran: ketiganya melaporkan True; shape 2-D (2, 3) dan dtype seperti <U4 tidak berubah sedikit pun melewati siklus simpan-muat.

Ketika Berkasnya Arsip npz #

np.load adalah fungsi serbaguna: bentuk hasil yang dikembalikan bergantung pada isi berkas. Bila berkasnya arsip .npz, fungsi yang sama tidak mengembalikan ndarray, melainkan objek NpzFile yang berperan sebagai wadah banyak array:

python
import numpy as np

harga = np.array([15000, 18000, 35000], dtype=np.int64)
np.savez("arsip.npz", harga=harga)
buka = np.load("arsip.npz")
print(type(buka))
print(buka.files)
print(buka["harga"])

Output yang Dihasilkan:

text
<class 'numpy.lib.npyio.NpzFile'>
['harga']
[15000 18000 35000]

Mari kita telaah:

  1. Baris 4 (np.savez(...)): arsip berisi satu array dibuat sebagai contoh.
  2. Baris 5-6 (np.load("arsip.npz")): hasilnya bertipe numpy.lib.npyio.NpzFile — objek arsip yang bisa diindeks dengan nama array di dalamnya, bukan ndarray langsung.
  3. Baris 7-8: atribut .files mendaftar nama array, dan buka["harga"] membaca isinya.

Cara mengakses isi arsip .npz secara lengkap — termasuk atribut .files, iterasi, dan pola with — dibahas khusus pada Chapter Memuat Arsip npz. Satu hal yang perlu diingat sejak sekarang: np.load memiliki parameter allow_pickle yang bawaannya False di NumPy 2.x, dan pengaturan ini adalah lini pertama keamanan saat memuat data, sebagaimana diuraikan pada Chapter Keamanan saat Memuat Data.