Menyusun tabel data dari vektor-vektor terpisah adalah pekerjaan sehari-hari: tinggi badan tersimpan di satu array, berat badan di array lain, dan kita ingin menjadikan masing-masing vektor satu kolom pada tabel dua dimensi. np.column_stack dirancang untuk kebutuhan ini. Pada fungsi tersebut, setiap array satu dimensi diperlakukan sebagai kolom, bukan baris.

Satu nama lagi yang mungkin kita temukan di kode lama adalah row_stack. Alias ini bersejarah: perilakunya identik dengan np.vstack, tetapi sejak NumPy 2.0 pemanggilannya memunculkan DeprecationWarning. Bab ini membahas keduanya sekaligus perbandingannya dengan np.vstack.

column_stack: Mengubah Vektor Menjadi Kolom #

np.column_stack menerima list array dan menjadikan setiap vektor satu dimensi sebagai satu kolom pada hasil dua dimensi. Panjang vektor menentukan jumlah baris hasil, sedangkan banyaknya vektor menentukan jumlah kolom.

python
import numpy as np

tinggi = np.array([165, 170, 158])
berat = np.array([60, 72, 55])
data = np.column_stack([tinggi, berat])
print(data)
print(data.shape)

Output yang Dihasilkan:

text
[[165  60]
 [170  72]
 [158  55]]
(3, 2)

Mari kita bedah mekanismenya:

  1. Baris 3-4 (np.array(...)): dua vektor 1-D masing-masing berukuran (3,) dibuat; panjang keduanya harus sama karena akan menjadi baris yang sejajar.
  2. Baris 5 (np.column_stack([...])): NumPy mengangkat tiap vektor menjadi vektor kolom berbentuk (3, 1), lalu menyambungkan hasil-hasil itu searah axis=1; bentuk akhirnya (3, 2).
  3. Baris 6-7 (print(...)): baris pertama berisi pasangan data orang pertama, yaitu tinggi 165 dan berat 60; urutan vektor pada list menentukan urutan kolom.

vstack vs column_stack pada Input yang Sama #

Perbedaan kedua fungsi paling jelas ketika keduanya diberi vektor-vektor yang sama: np.vstack menjadikan vektor sebagai baris, np.column_stack menjadikannya kolom.

python
import numpy as np

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(np.vstack([x, y]))
print(np.vstack([x, y]).shape)
print(np.column_stack([x, y]))
print(np.column_stack([x, y]).shape)

Output yang Dihasilkan:

text
[[1 2 3]
 [4 5 6]]
(2, 3)
[[1 4]
 [2 5]
 [3 6]]
(3, 2)
FungsiVektor 1-D diperlakukan sebagaiHasil pada (3,) + (3,)
np.vstackbaris(2, 3)
np.column_stackkolom(3, 2)

Menyisipkan Vektor sebagai Kolom Baru #

Karena array dua dimensi dibiarkan bentuknya, np.column_stack menjadi cara ringkas untuk menambahkan satu kolom hasil hitungan ke matriks yang sudah ada.

python
import numpy as np

matriks = np.array([[1, 2],
                    [3, 4]])
vektor = np.array([5, 6])
gab = np.column_stack([matriks, vektor])
print(gab)
print(gab.shape)

Output yang Dihasilkan:

text
[[1 2 5]
 [3 4 6]]
(2, 3)

Yang perlu dicermati dari pemanggilan di atas:

  1. matriks: array 2-D masuk apa adanya tanpa diangkat atau diubah.
  2. vektor: vektor (2,) diangkat menjadi kolom (2, 1) agar sejajar dengan dua baris matriks.
  3. Hasil (2, 3): kolom vektor menempel di sisi paling kanan; panjang vektor wajib sama dengan jumlah baris matriks.

row_stack: Alias Deprecated #

np.row_stack dahulu hanyalah nama lain dari np.vstack. Sejak NumPy 2.0, alias ini ditandai deprecated: pada NumPy 2.1.3 nama tersebut masih terdaftar dan masih bisa dipanggil, tetapi setiap pemanggilan memunculkan DeprecationWarning yang menyarankan penggunaan np.vstack.

python
import numpy as np
import warnings

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(hasattr(np, "row_stack"))
with warnings.catch_warnings(record=True) as terekam:
    warnings.simplefilter("always")
    hasil = np.row_stack([x, y])
print(hasil)
print(hasil.shape)
print(terekam[0].category.__name__)
print(str(terekam[0].message))

Output yang Dihasilkan:

text
True
[[1 2 3]
 [4 5 6]]
(2, 3)
DeprecationWarning
`row_stack` alias is deprecated. Use `np.vstack` directly.

Penjelasan baris demi baris:

  1. Baris 6 (hasattr(np, "row_stack")): memeriksa apakah atribut row_stack masih terdaftar pada modul np; hasilnya True pada NumPy 2.1.3 karena alias belum dihapus.
  2. Baris 7-9 (with warnings...): pemanggilan np.row_stack dibungkus warnings.catch_warnings agar peringatannya terekam ke dalam list tererekam, bukan hanya dicetak ke layar; hasilnya identik dengan np.vstack, yaitu (2, 3).
  3. Baris 12-13 (print(terekam[0]...)): kategori peringatan adalah DeprecationWarning, dan pesannya meminta kita memanggil np.vstack secara langsung.