Array NumPy memiliki ukuran yang tetap: begitu dibuat, jumlah elemennya tidak bisa bertambah atau berkurang. Padahal data nyata terus berubah — stok bertambah, nilai tambahan perlu masuk ke tengah daftar, atau data ganda harus dikeluarkan. Menyusun ulang seluruh array secara manual tentu rawan salah.
Untuk kebutuhan itu NumPy menyediakan tiga fungsi:
- np.append — menambah elemen di ujung array.
- np.insert — menyisipkan nilai pada posisi tertentu.
- np.delete — menghapus elemen berdasarkan indeks.
Ketiganya bekerja dengan pola yang sama di balik layar: membuat array baru, menyalin data lama, lalu mengembalikan hasilnya. Array asli tidak pernah diubah. Bab ini membedah ketiganya beserta parameter axis pada array dua dimensi, lalu ditutup dengan catatan biaya penyalinan dan pola alternatif yang lebih efisien.
Menambah Elemen di Ujung dengan append #
np.append menerima array asal, nilai atau array yang ingin ditambahkan, dan parameter axis opsional. Tanpa axis, kedua array diratakan menjadi satu dimensi (flatten) sebelum digabung. Mari kita mulai dari array satu dimensi:
import numpy as np
nilai = np.array([70, 85, 90])
nilai_baru = np.append(nilai, 95)
print(nilai_baru)
print(nilai)
print(np.append(nilai, [80, 88]))Output yang Dihasilkan:
[70 85 90 95]
[70 85 90]
[70 85 90 80 88]Mari kita telusuri baris demi baris:
- Baris 4 (
nilai_baru = np.append(nilai, 95)): NumPy membuat array baru berisi seluruh elemennilaiditambah95di ujung. Hasilnya[70 85 90 95]disimpan kenilai_baru. - Baris 6 (
print(nilai)): array asli tetap[70 85 90]. Fungsi ini tidak menyentuh buffer miliknilai— berbeda darilist.appendPython yang mengubah list langsung. - Baris 7 (
np.append(nilai, [80, 88])): argumen kedua boleh berupa list atau array dengan banyak elemen; semuanya digabung dalam urutan yang diberikan.
append pada Array Dua Dimensi dan Parameter axis #
Pada array dua dimensi, perilaku default np.append sering mengejutkan: hasilnya diratakan menjadi satu dimensi. Untuk menambah baris atau kolom, kita wajib memberikan parameter axis secara eksplisit.
import numpy as np
matriks = np.array([[1, 2], [3, 4]])
print(np.append(matriks, [9, 9]))
print(np.append(matriks, [[9, 9]], axis=0))
print(np.append(matriks, [[5], [6]], axis=1))Output yang Dihasilkan:
[1 2 3 4 9 9]
[[1 2]
[3 4]
[9 9]]
[[1 2 5]
[3 4 6]]Penjelasan tiap baris:
- Baris 4 (
np.append(matriks, [9, 9])): tanpaaxis, NumPy meratakan kedua array menjadi 1-D lalu menggabungkannya. Matriks2 x 2berubah menjadi deretan[1 2 3 4 9 9]berbentuk(6,). - Baris 5 (
axis=0): menambah satu baris di bawah. Argumen kedua ditulis[[9, 9]]dengan dua lapis kurung siku agar bentuknya(1, 2)— satu baris berisi dua kolom. - Baris 6 (
axis=1): menambah satu kolom di sisi kanan. Argumen kedua[[5], [6]]berbentuk(2, 1)— dua baris berisi satu kolom.
Menyisipkan dan Menghapus dengan insert dan delete #
np.insert menyisipkan nilai pada posisi tertentu, sedangkan np.delete mengeluarkan elemen berdasarkan indeks. Sama seperti np.append, keduanya mengembalikan array baru dan membiarkan array asli utuh.
import numpy as np
stok = np.array([12, 5, 8])
disisipkan = np.insert(stok, 1, 20)
print(disisipkan)
dihapus = np.delete(disisipkan, 0)
print(dihapus)Output yang Dihasilkan:
[12 20 5 8]
[20 5 8]Yang terjadi:
- Baris 4 (
np.insert(stok, 1, 20)): nilai20disisipkan sebelum posisi indeks 1, sehingga5bergeser ke kanan. Hasilnya[12 20 5 8]. - Baris 6 (
np.delete(disisipkan, 0)): elemen pada indeks 0 dikeluarkan; elemen setelahnya digeser ke kiri tanpa meninggalkan lubang. Panjang array berkurang satu.
Kedua fungsi juga menerima daftar posisi sekaligus. Blok berikut membandingkannya dengan dua pola alternatif: membangun list Python lalu mengonversinya sekali, dan boolean mask untuk penghapusan berbasis kondisi.
import numpy as np
nilai = np.array([70, 85, 90, 60])
print(np.insert(nilai, [0, 2], 99))
print(np.delete(nilai, [1, 3]))
tambahan = [50, 95]
gabungan = np.array([70, 85, 90] + tambahan)
print(gabungan)
print(nilai[nilai != 85])Output yang Dihasilkan:
[99 70 85 99 90 60]
[70 90]
[70 85 90 50 95]
[70 90 60]Rinciannya:
- Baris 4 (
np.insert(nilai, [0, 2], 99)): satu nilai99disisipkan pada dua posisi sekaligus — sebelum indeks 0 dan sebelum indeks 2 pada array asli. Hasilnya[99 70 85 99 90 60]. - Baris 5 (
np.delete(nilai, [1, 3])): indeks 1 (85) dan indeks 3 (60) dihapus dalam satu panggilan. - Baris 8 (
gabungan = np.array([70, 85, 90] + tambahan)): operator+pada dua list Python menggabungkan isinya menjadi[70, 85, 90, 50, 95], lalunp.array(...)mengonversi hasil gabungan hanya satu kali. - Baris 11 (
nilai[nilai != 85]): boolean mask mengambil semua elemen kecuali85. Pola ini dibahas tuntas pada Chapter Boolean Indexing.
Biaya Penyalinan dan Pola yang Lebih Efisien #
Setiap panggilan np.append, np.insert, maupun np.delete menyalin seluruh isi array, sehingga biayanya sebanding dengan panjang array — O(n). Jika kita menambah satu elemen di dalam loop sebanyak seribu kali, data disalin ulang seribu kali pula. Untuk skenario seperti itu, kumpulkan data di list Python terlebih dahulu, lalu konversi dengan np.array hanya sekali di akhir.
Tabel berikut merangkum pilihan yang disarankan:
| Kebutuhan | Pilihan yang disarankan | Alasan |
|---|---|---|
| Menambah banyak elemen dalam loop | list Python + np.array di akhir | menghindari penyalinan ulang tiap iterasi |
| Menyisipkan beberapa nilai pada posisi persis | np.insert dengan daftar posisi | satu panggilan, posisi eksplisit |
| Menghapus elemen berdasarkan kondisi | boolean mask a[a != x] | tanpa mencari indeks manual |
| Menghapus berdasarkan indeks tertentu | np.delete | praktis bila indeks memang diketahui |