Setelah shape, atribut ndim adalah pertanyaan paling ringkas yang bisa kita ajukan ke sebuah array: berapa jumlah dimensinya? ndim mengembalikan satu bilangan bulat, yaitu jumlah axis array. Nilai ini berguna saat kita menulis fungsi yang harus bekerja untuk input 1-D maupun 2-D, atau saat memeriksa hasil konversi data dari sumber luar.

Kita tetap memakai data penjualan jaringan toko dari bab sebelumnya sehingga perbandingan antar-array tetap konsisten. Di bab ini kita membaca ndim berbagai array, membedah kasus khusus scalar 0-d, dan mencoba fungsi np.ndim() yang bisa diterapkan pada objek Python biasa.

ndim sebagai jumlah axis #

ndim menyatakan berapa banyak axis, yaitu arah penomoran, yang dimiliki array. Array 1-D punya satu axis, array 2-D punya dua axis (baris dan kolom), dan array 3-D punya tiga axis bersarang. Karena shape menyimpan panjang setiap axis, nilai ndim selalu sama dengan panjang tuple shape.

python
import numpy as np

penjualan_cabang = np.array([120, 95, 143, 88, 210, 176])
penjualan_harian = np.array([
    [85, 90, 78, 102],
    [64, 71, 69, 80],
    [110, 98, 105, 123],
])
penjualan_wilayah = np.array([
    [[85, 90, 78, 102], [64, 71, 69, 80], [110, 98, 105, 123]],
    [[70, 75, 82, 88], [58, 62, 60, 71], [95, 99, 91, 104]],
])

print(penjualan_cabang.ndim)
print(penjualan_harian.ndim)
print(penjualan_wilayah.ndim)
print(penjualan_wilayah.ndim == len(penjualan_wilayah.shape))

Output yang Dihasilkan:

text
1
2
3
True

Dua hal perlu kita perhatikan dari kode di atas:

  1. Baris 14-16 (print(...ndim)): masing-masing array penjualan menghasilkan ndim 1, 2, dan 3 sesuai kedalaman list bersarangnya.
  2. Baris 17 (...ndim == len(...shape)): panjang tuple shape array 3-D adalah 3, sama dengan ndim-nya, sehingga perbandingan bernilai True.

Tabel berikut merangkum kaitan ndim dengan shape pada contoh kita:

Objekndimshape
Array 1-D (enam cabang)1(6,)
Array 2-D (tiga cabang, empat hari)2(3, 4)
Array 3-D (dua wilayah, tiga cabang, empat hari)3(2, 3, 4)

Scalar 0-d dan array satu elemen #

Kasus paling ekstrem adalah scalar 0-d: array yang dibuat dari satu angka Python tanpa dibungkus list. Array jenis ini tidak punya axis sama sekali sehingga ndim-nya 0 dan shape-nya tuple kosong (). Jangan sampai tertukar dengan array 1-D berisi satu elemen; array tersebut tetap punya satu axis berpanjang 1.

python
import numpy as np

skalar = np.array(5)
satu_elemen = np.array([5])

print(skalar.ndim, skalar.shape, repr(skalar))
print(satu_elemen.ndim, satu_elemen.shape)
print(satu_elemen[0])

Output yang Dihasilkan:

text
0 () array(5)
1 (1,)
5

Mari kita bedah perbedaannya:

  1. Baris 3 (skalar = np.array(5)): angka 5 dibungkus tanpa list; hasilnya array 0-d dengan ndim 0, shape (), dan repr array(5).
  2. Baris 4 (satu_elemen = np.array([5])): angka yang sama dibungkus list; hasilnya array 1-d dengan ndim 1 dan shape (1,).
  3. Baris 8 (satu_elemen[0]): array 1-D satu elemen masih bisa diindeks karena punya axis; hasilnya 5.

Kasus 0-d penting karena muncul tanpa kita sadari sebelumnya. Fungsi agregasi atau pustaka luar kadang mengembalikan angka tunggal dalam bentuk array 0-d, misalnya nilai rata-rata yang belum diambil nilai Pythonnya. Bila kita lupa bahwa array 0-d tidak punya axis, operasi indeks akan menimbulkan error.

Fungsi np.ndim() #

Selain atribut array.ndim, NumPy menyediakan fungsi np.ndim() yang menerima objek apa pun yang bisa dikonversi menjadi array. Fungsi ini praktis saat kita belum yakin input berupa array NumPy atau list Python biasa.

python
import numpy as np

penjualan_cabang = np.array([120, 95, 143, 88, 210, 176])

print(np.ndim(penjualan_cabang))
print(np.ndim(15000))
print(np.ndim([[85, 90], [64, 71]]))

Output yang Dihasilkan:

text
1
0
2

Hasil di atas menunjukkan tiga perilaku np.ndim():

  1. Baris 5 (np.ndim(penjualan_cabang)): input array NumPy 1-D menghasilkan 1, sama seperti atribut ndim.
  2. Baris 6 (np.ndim(15000)): input angka Python murni menghasilkan 0, karena angka tunggal dikonversi menjadi array 0-d.
  3. Baris 7 (np.ndim([[85, 90], [64, 71]])): input list bersarang dua tingkat menghasilkan 2; fungsi menghitung kedalaman bersarang tanpa perlu kita konversi manual.