Mengubah Bentuk Matriks pada NumPy
Artikel ini adalah kelanjutan dari tulisan sebelumnya: belajar Python NumPy dengan IPython. Kali ini kita akan belajar konsep pengubahan bentuk matriks pada NumPy array.
Pada bahasa pemrograman berbasis matriks (seperti Matlab, Octave, Julia, Scilab, dan Python NumPy), hampir semua kesalahan (eror) yang ditemui oleh pemula adalah ketidaksesuaian ukuran matriks. Ya, pastinya untuk bisa mengoperasikan dua buah matriks atau lebih, ukuran matriks-matriks tersebut harus berkesesuaian. Tulisan ini mengenalkan cara-cara mengubah bentuk matriks pada NumPy array.
Hal mendasar pada pengubahan bentuk matriks pada NumPy adalah operasi tersebut hanya memengaruhi struktur larik (array), bukan datanya. Operasi tersebut umumnya dapat dilakukan tanpa menyalin memori. Artinya, operasi tersebut menghemat memori. Dari empat teknik yang akan dijelaskan untuk mengubah bentuk matriks, tiga teknik memproses array tanpa menyalin memori (transpose, reshape, flatten), sedang teknik terakhir, ravel, memproses array dengan menyalin memori.
Transpose
Operasi dasar 'membalik' matriks dinamakan transpose. Pada NumPy, operasi ini bisa dilakukan dengan tiga cara: .T, .transpose(), dan np.transpose(). Ketiganya sama, hanya berbeda namanya saja: .T adalah atribut, .transpose() merupakan metode, dan np.transpose() merupakan fungsi. Baik .T dan .tranpose() tidak menerima argumen (input), hanya np.transpose() yang bisa menerima argumen. Simak video screencast di bawah ini untuk prakteknya.
# Perintah dasar: a.T a.transpose() np.transpose(a)
Untuk matriks 3D tidak dibahas dulu, namun jika anda ingin mempelajarinya, silahkan lihat screencastnya di sini.
Reshape
Teknik kedua untuk mengubah bentuk matriks adalah dengan reshape. Seperti halnya transpose, reshape bisa berupa perintah/fungsi (np.reshape()) atau metode (.reshape()). Sesuai namanya, fungsi/metode ini digunakan untuk mengubah bentuk matriks, misal dari ukuran (m, n) menjadi (n, m). Perlu diperhatikan bahwa perintah reshape tidak sama dengan transpose. Pada kasus reshape matrik A (m, n) menjadi B (n, m) hanya ukurannya yang dibalik, bukan matriksnya. Perhatikan screencast di bawah ini.
# Perintah dasar: a.reshape(baris, kolom) np.reshape(a, (baris, kolom)
Reshape(-1,1) dan Reshape(1, -1)
Perintah reshape memiliki fitur yang unik, yakni reshape(-1, 1) untuk membentuk vektor kolom dan (1,-1) untuk membentuk vektor baris. Kedua fitur ini banyak dipakai dan mudah dipahami. Argumen -1 menunjukkan bentuk (shape) yang tidak diketahui. Misal matriks berukuran (3, 2), maka reshape(-1, 1) menghasilkan matriks berukuran (6, 1) sedangkan reshape (1, -1) menghasilkan matriks berukuran (1, 6). Simak demonya sebagai berikut.
# perintah dasar: a.reshape(-1, 1) # membentuk matriks kolom a.reshape(1, -1) # membentuk matriks baris
Flatten dan Ravel
Baik perintah flatten dan ravel menghasilkan luaran yang sama: matrik 1D (alias vektor). Bedanya, flatten menyalin matriks asli sedangkan ravel tidak (jika memungkinkan). Sehingga, memodifikasi matriks hasil flatten tidak mengubah matriks asli sedangan memodifikasi matrik hasil flatten mengubah matriks asli. Perhatikan screencast berikut.
# perintah dasar: a.flatten() a.ravel()
Penutup
Tulisan ini menjelaskan cara-cara mengubah bentuk matriks pada NumPy array. Ada beberapa teknik yang digunakan: transpose, reshape, flatten, dan ravel. Setiap perintah tersebut memiliki karakteristik yang berbeda-beda. Memahami setiap kegunaan perintah tersebut akan memudahkan operasi matriks, yang mana bentuk atau ukuran matriks sangat penting dalam operasi tersebut.