Banyak perhitungan membutuhkan deret angka teratur: nomor jam 0 sampai 23, langkah simulasi 0, 3, 6, 9, atau titik sampel suhu dari 27 sampai 30 derajat. NumPy menyediakan dua fungsi pembuat deret dengan karakter yang berbeda: np.arange yang melangkah dengan jarak tetap, dan np.linspace yang membagi rentang menjadi sejumlah titik sama jarak. Memilih fungsi yang tepat — khususnya pada angka pecahan — mencegah hasil deret yang menyimpang.
Kita akan mempelajari:
- Cara kerja
arange(start, stop, step)dengan batas atas eksklusif. - Jebakan presisi ketika
stepberupa bilangan pecahan. - Perilaku
linspace(start, stop, num)yang menyertakan titik akhir.
arange: deret dengan langkah tetap #
Fungsi np.arange menerima argumen start, stop, dan step. Nilai stop tidak pernah dimasukkan ke hasil, sehingga deret berhenti tepat sebelum batas atas:
import numpy as np
a = np.arange(0, 10, 3)
print(a)
b = np.arange(5)
print(b)Output yang Dihasilkan:
[0 3 6 9]
[0 1 2 3 4]- Baris 3 (
np.arange(0, 10, 3)): mulai dari 0, melangkah 3, berhenti sebelum 10 — hasilnya0 3 6 9. Nilai9 + 3 = 12melewati batas, sehingga tidak disertakan. - Baris 5 (
np.arange(5)): dengan satu argumen,startmengambil nilai bawaan 0 danstepbernilai 1, menghasilkan deret integer 0 sampai 4.
Jebakan presisi pada step pecahan #
Masalah muncul ketika step berupa pecahan. Angka pecahan seperti 0.1 dan 0.2 tidak dapat disimpan persis dalam biner, sehingga penjumlahan berulang menumpuk galat. Akibatnya, jumlah elemen dan nilai elemen terakhir bisa menyimpang dari perkiraan kita:
import numpy as np
a = np.arange(0, 1, 0.2)
print(a, len(a))
b = np.arange(0, 1.3, 0.1)
print(b[-1])
print("panjang b:", len(b))Output yang Dihasilkan:
[0. 0.2 0.4 0.6 0.8] 5
1.2000000000000002
panjang b: 13- Baris 3 (
np.arange(0, 1, 0.2)): hasilnya lima elemen dan tampilan nilainya masih bersih. - Baris 5 (
b[-1]): elemen terakhir seharusnya1.2, tetapi tercetak1.2000000000000002— galat akumulasi penjumlahan0.1berulang kali. - Baris 6 (
len(b)): jumlah elemen pada deret ber-step pecahan dihitung lewat pembagian pecahan, sehingga bisa berbeda satu elemen dari perkiraan.
linspace: sejumlah titik dengan rentang pasti #
Fungsi np.linspace(start, stop, num) membagi rentang menjadi num titik berjarak sama. Berbeda dari arange, nilai stop ikut termasuk secara bawaan, dan jumlah elemen ditegaskan lewat num — bukan dihitung dari pembagian pecahan:
import numpy as np
l = np.linspace(0, 1, 5)
print(l)
l2 = np.linspace(27.0, 30.0, 4)
print(l2)
l3 = np.linspace(0, 1, 5, endpoint=False)
print(l3)Output yang Dihasilkan:
[0. 0.25 0.5 0.75 1. ]
[27. 28. 29. 30.]
[0. 0.2 0.4 0.6 0.8]- Baris 3 (
np.linspace(0, 1, 5)): rentang 0 sampai 1 dibagi menjadi 5 titik berjarak0.25; titik akhir1.ikut tampil. - Baris 5 (
np.linspace(27.0, 30.0, 4)): pembagian rentang suhu menjadi 4 titik menghasilkan27, 28, 29, 30— jumlah elemen pasti sesuainum. - Baris 7 (
endpoint=False): titik akhir dikeluarkan, sehingga hasilnya lima titik berjarak0.2dari 0 sampai0.8— persis seperti deretarange(0, 1, 0.2)yang kita inginkan, tetapi dihitung tanpa penumpukan galat.
Tabel berikut merangkum kapan kita sebaiknya memilih masing-masing fungsi:
| Aspek | np.arange | np.linspace |
|---|---|---|
| Jumlah elemen ditentukan oleh | step | num |
Titik akhir (stop) | tidak termasuk | termasuk (bisa dimatikan dengan endpoint=False) |
| Deret integer | pilihan alami | perlu argumen tambahan dtype=int |
| Deret pecahan | rentan galat presisi | aman dan jumlah elemennya pasti |