Idenya
Sebelum bisa menghitung, kamu butuh array. Kadang angkanya datang dari data (list, file, kolom pandas). Sering kali kamu perlu membangkitkannya: hari-hari dalam sebulan, 100 titik berjarak sama untuk grafik, grid berisi nol untuk diisi nanti. NumPy punya fungsi untuk masing-masing.
Dari list: np.array
Kalau angkanya sudah ada, seperti jumlah order harian selama seminggu, berikan ke np.array dalam bentuk list:
import numpy as np
daily_orders = np.array([42, 38, 51, 47, 60, 75, 68])
print(daily_orders)
[42 38 51 47 60 75 68]
List berisi list menjadi array 2-D, grid dengan baris dan kolom. Setiap list di dalamnya adalah satu baris, dan semua baris harus punya panjang yang sama:
# unit terjual: baris = toko, kolom = bulan (Jan sampai Jun)
units = np.array([
[120, 135, 150, 160, 155, 170], # Jakarta
[ 80, 85, 90, 88, 95, 100], # Bandung
[ 95, 92, 105, 110, 108, 115], # Surabaya
])
print(units)
[[120 135 150 160 155 170]
[ 80 85 90 88 95 100]
[ 95 92 105 110 108 115]]
Itulah bentuk sebagian besar data yang akan kamu tangani: tabel angka. Array 2-D persis seperti yang ada di balik DataFrame pandas yang berisi angka.
Rentang: np.arange
Sering kali kamu butuh deret angka, bukan data yang sudah ada: nomor hari 1 sampai 31, ID order, atau setiap nilai kelipatan sepuluh untuk sumbu grafik. np.arange adalah versi NumPy dari range, tapi memberimu array:
print(np.arange(5)) # 0 sampai 4
print(np.arange(1, 8)) # 1 sampai 7
print(np.arange(0, 50, 10)) # langkah 10
[0 1 2 3 4]
[1 2 3 4 5 6 7]
[ 0 10 20 30 40]
Seperti range, nilai stop tidak ikut: np.arange(1, 8) berakhir di 7. Berbeda dengan range, ia juga menerima desimal:
print(np.arange(0, 1, 0.25))
[0. 0.25 0.5 0.75]
Dengan langkah desimal, pembulatan bisa membuat arange mengikutsertakan atau melewatkan nilai terakhir secara tak terduga (0.1 tidak bisa disimpan persis dalam biner). Saat kamu ingin "N titik antara A dan B", pakai linspace saja.
Titik-titik berjarak sama: np.linspace
np.linspace(start, stop, num) memberi num titik dari start sampai stop, termasuk kedua ujungnya:
print(np.linspace(0, 1, 5))
print(np.linspace(100, 200, 3))
[0. 0.25 0.5 0.75 1. ]
[100. 150. 200.]
Kamu memilih berapa banyak titiknya, dan NumPy menghitung jaraknya. Itulah yang kamu inginkan untuk grafik ("gambar kurva ini dengan 100 titik") dan untuk skenario ("coba 5 tingkat diskon dari 0% sampai 40%"):
discounts = np.linspace(0, 0.4, 5)
price = 320
print(discounts)
print(price * (1 - discounts))
[0. 0.1 0.2 0.3 0.4]
[320. 288. 256. 224. 192.]
Array yang terisi: zeros, ones, full
Untuk membuat array dengan shape tertentu yang diisi satu nilai:
print(np.zeros(4))
print(np.ones((2, 3)))
print(np.full((2, 4), 7))
[0. 0. 0. 0.]
[[1. 1. 1.]
[1. 1. 1.]]
[[7 7 7 7]
[7 7 7 7]]
- Shape-nya berupa angka untuk 1-D, atau tuple
(rows, columns)untuk 2-D. Perhatikan tanda kurung ganda dinp.ones((2, 3)): pasangan di dalam adalah tuple-nya. zerosdanonessecara default memberi float (0.dan1.). Berikandtype=intkalau kamu ingin bilangan bulat.full(shape, value)mengisi dengan nilai apa pun.
Kenapa membuat grid berisi nol? Untuk diisi nanti, misalnya tabel toko × minggu yang kamu lengkapi saat data datang. Kamu akan belajar meng-assign ke dalam array di modul indexing.
Masing-masing punya versi _like yang menyalin shape dari array yang sudah ada:
targets = np.full_like(units, 100)
print(targets)
[[100 100 100 100 100 100]
[100 100 100 100 100 100]
[100 100 100 100 100 100]]
Memilih tipe: dtype
Setiap fungsi pembuat array menerima dtype= untuk memilih tipe elemennya:
print(np.zeros(3, dtype=int))
print(np.array([1, 2, 3], dtype=float))
print(np.arange(3, dtype=np.float32))
[0 0 0]
[1. 2. 3.]
[0. 1. 2.]
Modul berikutnya menjelaskan dtype secara detail.
Mengapa ini penting untuk kode yang bersih
Membangkitkan angka dengan fungsi yang tepat menyatakan maksudmu: np.linspace(0, 0.4, 5) jelas berarti "5 diskon berjarak sama", sedangkan [0, 0.1, 0.2, 0.3, 0.4] yang diketik manual mengundang typo dan harus diketik ulang saat kamu ingin 9 tingkat. Utamakan fungsi yang menghitung input-mu dibanding nilai yang diketik manual.
Rangkuman
np.array(list)membuat array 1-D; list berisi list yang panjangnya sama membuat array 2-D.np.arange(start, stop, step): sepertirange, stop tidak ikut.np.linspace(start, stop, num):numtitik berjarak sama, kedua ujungnya ikut.np.zeros(shape),np.ones(shape),np.full(shape, value); shape 2-D berupa tuple.*_like(arr)menyalin shape sebuah array;dtype=memilih tipe elemen.