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:

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

text
[70 85 90 95]
[70 85 90]
[70 85 90 80 88]

Mari kita telusuri baris demi baris:

  1. Baris 4 (nilai_baru = np.append(nilai, 95)): NumPy membuat array baru berisi seluruh elemen nilai ditambah 95 di ujung. Hasilnya [70 85 90 95] disimpan ke nilai_baru.
  2. Baris 6 (print(nilai)): array asli tetap [70 85 90]. Fungsi ini tidak menyentuh buffer milik nilai — berbeda dari list.append Python yang mengubah list langsung.
  3. 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.

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

text
[1 2 3 4 9 9]
[[1 2]
 [3 4]
 [9 9]]
[[1 2 5]
 [3 4 6]]

Penjelasan tiap baris:

  1. Baris 4 (np.append(matriks, [9, 9])): tanpa axis, NumPy meratakan kedua array menjadi 1-D lalu menggabungkannya. Matriks 2 x 2 berubah menjadi deretan [1 2 3 4 9 9] berbentuk (6,).
  2. 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.
  3. 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.

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

text
[12 20  5  8]
[20  5  8]

Yang terjadi:

  1. Baris 4 (np.insert(stok, 1, 20)): nilai 20 disisipkan sebelum posisi indeks 1, sehingga 5 bergeser ke kanan. Hasilnya [12 20 5 8].
  2. 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.

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

text
[99 70 85 99 90 60]
[70 90]
[70 85 90 50 95]
[70 90 60]

Rinciannya:

  1. Baris 4 (np.insert(nilai, [0, 2], 99)): satu nilai 99 disisipkan pada dua posisi sekaligus — sebelum indeks 0 dan sebelum indeks 2 pada array asli. Hasilnya [99 70 85 99 90 60].
  2. Baris 5 (np.delete(nilai, [1, 3])): indeks 1 (85) dan indeks 3 (60) dihapus dalam satu panggilan.
  3. Baris 8 (gabungan = np.array([70, 85, 90] + tambahan)): operator + pada dua list Python menggabungkan isinya menjadi [70, 85, 90, 50, 95], lalu np.array(...) mengonversi hasil gabungan hanya satu kali.
  4. Baris 11 (nilai[nilai != 85]): boolean mask mengambil semua elemen kecuali 85. 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:

KebutuhanPilihan yang disarankanAlasan
Menambah banyak elemen dalam looplist Python + np.array di akhirmenghindari penyalinan ulang tiap iterasi
Menyisipkan beberapa nilai pada posisi persisnp.insert dengan daftar posisisatu panggilan, posisi eksplisit
Menghapus elemen berdasarkan kondisiboolean mask a[a != x]tanpa mencari indeks manual
Menghapus berdasarkan indeks tertentunp.deletepraktis bila indeks memang diketahui