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 step berupa 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:

python
import numpy as np

a = np.arange(0, 10, 3)
print(a)
b = np.arange(5)
print(b)

Output yang Dihasilkan:

text
[0 3 6 9]
[0 1 2 3 4]
  1. Baris 3 (np.arange(0, 10, 3)): mulai dari 0, melangkah 3, berhenti sebelum 10 — hasilnya 0 3 6 9. Nilai 9 + 3 = 12 melewati batas, sehingga tidak disertakan.
  2. Baris 5 (np.arange(5)): dengan satu argumen, start mengambil nilai bawaan 0 dan step bernilai 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:

python
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:

text
[0.  0.2 0.4 0.6 0.8] 5
1.2000000000000002
panjang b: 13
  1. Baris 3 (np.arange(0, 1, 0.2)): hasilnya lima elemen dan tampilan nilainya masih bersih.
  2. Baris 5 (b[-1]): elemen terakhir seharusnya 1.2, tetapi tercetak 1.2000000000000002 — galat akumulasi penjumlahan 0.1 berulang kali.
  3. 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:

python
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:

text
[0.   0.25 0.5  0.75 1.  ]
[27. 28. 29. 30.]
[0.  0.2 0.4 0.6 0.8]
  1. Baris 3 (np.linspace(0, 1, 5)): rentang 0 sampai 1 dibagi menjadi 5 titik berjarak 0.25; titik akhir 1. ikut tampil.
  2. Baris 5 (np.linspace(27.0, 30.0, 4)): pembagian rentang suhu menjadi 4 titik menghasilkan 27, 28, 29, 30 — jumlah elemen pasti sesuai num.
  3. Baris 7 (endpoint=False): titik akhir dikeluarkan, sehingga hasilnya lima titik berjarak 0.2 dari 0 sampai 0.8 — persis seperti deret arange(0, 1, 0.2) yang kita inginkan, tetapi dihitung tanpa penumpukan galat.

Tabel berikut merangkum kapan kita sebaiknya memilih masing-masing fungsi:

Aspeknp.arangenp.linspace
Jumlah elemen ditentukan olehstepnum
Titik akhir (stop)tidak termasuktermasuk (bisa dimatikan dengan endpoint=False)
Deret integerpilihan alamiperlu argumen tambahan dtype=int
Deret pecahanrentan galat presisiaman dan jumlah elemennya pasti