NumPy reshape(): Cara Membentuk Ulang Array NumPy dengan Python
Diterbitkan: 2022-04-20Dalam tutorial ini, Anda akan belajar bagaimana menggunakan NumPy reshape() untuk membentuk ulang array NumPy tanpa mengubah data aslinya.
Saat bekerja dengan array Numpy, Anda mungkin sering ingin membentuk ulang array yang ada menjadi array dengan dimensi yang berbeda. Ini bisa sangat berguna saat Anda mengubah data dalam beberapa langkah.
Dan NumPy reshape reshape()
membantu Anda melakukannya dengan mudah. Selama beberapa menit berikutnya, Anda akan mempelajari sintaks untuk menggunakan reshape()
, dan juga membentuk ulang array ke dimensi yang berbeda.
Apa itu Reshaping di NumPy Arrays?
Saat bekerja dengan array NumPy, Anda mungkin ingin membuat array angka 1 dimensi terlebih dahulu. Dan kemudian bentuk kembali ke array dengan dimensi yang diinginkan.
Ini sangat membantu ketika dimensi array baru tidak diketahui pada awalnya atau disimpulkan selama eksekusi. Atau mungkin juga langkah pemrosesan data tertentu memerlukan input dalam bentuk tertentu.
Di sinilah pembentukan kembali berguna.
Sebagai contoh, perhatikan ilustrasi berikut. Kami memiliki vektor—array satu dimensi dari 6 elemen. Dan kita bisa membentuknya kembali menjadi susunan bentuk 2×3, 3×2, 6×1, dan seterusnya.

️ Untuk mengikuti contoh dalam tutorial ini, Anda harus menginstal Python dan NumPy. Jika Anda belum memiliki NumPy, lihat panduan instalasi NumPy kami.
Anda sekarang dapat melanjutkan dan mengimpor NumPy di bawah alias np
, dengan menjalankan: import numpy as np
.
Mari kita lanjutkan untuk mempelajari sintaks di bagian selanjutnya.
Sintaks bentuk ulang NumPy()
Berikut sintaks untuk menggunakan NumPy reshape():
np.reshape(arr, newshape, order = 'C'|'F'|'A')
- arr adalah objek array NumPy yang valid. Di sini, array yang akan dibentuk kembali.
- newshape adalah bentuk dari array baru. Itu bisa berupa bilangan bulat atau tupel.
- Ketika newshape adalah bilangan bulat, array yang dikembalikan adalah satu dimensi.
- order mengacu pada urutan di mana Anda ingin membaca elemen array yang akan dibentuk ulang.
- Nilai default adalah 'C', yang berarti elemen dari array asli akan dibaca dalam urutan pengindeksan seperti C (dimulai dengan 0)
- 'F' adalah singkatan dari Fortran-like indexing (dimulai dengan 1). Dan 'A' membaca elemen dalam urutan seperti C atau Fortran tergantung pada tata letak memori array arr .
Jadi apa yang
np.reshape()
?Ini mengembalikan tampilan yang dibentuk ulang dari array asli jika memungkinkan. Lain, itu mengembalikan salinan array.
Pada baris di atas, kami menyebutkan bahwa NumPy reshape()
akan mencoba mengembalikan tampilan bila memungkinkan. Lain, itu mengembalikan copy . Mari kita lanjutkan untuk membahas perbedaan antara tampilan dan salinan.
Lihat vs. Salinan NumPy Array
Seperti namanya, copy adalah salinan dari array asli. Dan setiap perubahan yang dibuat pada salinan tidak akan memengaruhi larik asli.
Di sisi lain, view hanya mengacu pada tampilan yang dibentuk ulang dari array asli. Ini berarti bahwa setiap perubahan yang dilakukan pada tampilan juga akan memengaruhi larik asli dan sebaliknya.
Gunakan NumPy reshape() untuk Membentuk Ulang Array 1D menjadi Array 2D
#1. Mari kita mulai dengan membuat array sampel menggunakan np.arange().
Kami membutuhkan array 12 angka, dari 1 hingga 12, yang disebut arr1. Karena fungsi NumPy arange() mengecualikan titik akhir secara default, atur nilai stop ke 13.
Sekarang mari kita gunakan sintaks di atas, dan bentuk arr1
dengan 12 elemen menjadi array bentuk 2D (4,3). Sebut saja ini arr2
dengan 4 baris, dan 3 kolom.
import numpy as np arr1 = np.arange(1,13) print("Original array, before reshaping:\n") print(arr1) # Reshape array arr2 = np.reshape(arr1,(4,3)) print("\nReshaped array:") print(arr2)
Mari kita lihat array asli dan yang dibentuk ulang.
Original array, before reshaping: [ 1 2 3 4 5 6 7 8 9 10 11 12] Reshaped array: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
Alih-alih meneruskan array sebagai argumen
np.reshape()
, Anda juga dapat memanggil metode.reshape()
pada array asli.
Anda dapat menjalankan dir(arr1)
, dan itu akan mencantumkan semua kemungkinan metode dan atribut yang dapat Anda gunakan pada objek array arr1
.
dir(arr1) # Output [ ... ... 'reshape' ... .. ]
Dalam sel kode di atas, Anda dapat melihat bahwa .reshape()
adalah metode yang valid untuk digunakan pada array NumPy arr1
yang ada.
️ Jadi, Anda juga dapat menggunakan sintaks sederhana berikut untuk membentuk ulang array NumPy.
arr.reshape(d0,d1,...,dn) # where: # d0, d1,..,dn are the dimensions of the reshaped array # d0 * d1 * ...* dn = N, the number of elements in arr
Untuk sisa tutorial ini, mari kita gunakan sintaks ini dalam contoh kita.
#2. Mari kita coba membentuk kembali vektor 12 elemen kita menjadi array 12 x 1.
import numpy as np arr1 = np.arange(1,13) print("Original array, before reshaping:\n") print(arr1) # Reshape array arr3 = arr1.reshape(12,1) print("\nReshaped array:") print(arr3)
Pada output di bawah ini, Anda dapat melihat bahwa array telah dibentuk ulang sesuai kebutuhan.
Original array, before reshaping: [ 1 2 3 4 5 6 7 8 9 10 11 12] Reshaped array: [[ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9] [10] [11] [12]]
Jadi, bagaimana kami memeriksa apakah kami telah memperoleh salinan atau tampilan?
Untuk memeriksa ini, Anda dapat memanggil atribut base
pada larik yang dikembalikan.
- Jika array adalah salinan, atribut
base
adalahNone
. - Jika array adalah tampilan, atribut
base
akan menjadi array asli.
Mari kita cepat memverifikasi ini.

arr3.base # Output array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Seperti yang Anda lihat, atribut base
arr3
mengembalikan array asli. Ini berarti bahwa kami telah menerima tampilan array asli.
#3. Sekarang, mari kita coba untuk membentuk kembali vektor menjadi array 2 x 6 lain yang valid.
import numpy as np arr1 = np.arange(1,13) print("Original array, before reshaping:\n") print(arr1) # Reshape array arr4 = arr1.reshape(2,6) print("\nReshaped array:") print(arr4)
Dan inilah outputnya:
Original array, before reshaping: [ 1 2 3 4 5 6 7 8 9 10 11 12] Reshaped array: [[ 1 2 3 4 5 6] [ 7 8 9 10 11 12]]
Di bagian selanjutnya, mari kita bentuk arr1
menjadi array 3D.
Gunakan NumPy reshape() untuk Membentuk Ulang Array 1D menjadi Array 3D
Untuk membentuk kembali arr1
ke array 3D, mari kita atur dimensi yang diinginkan ke (1, 4, 3).
import numpy as np arr1 = np.arange(1,13) print("Original array, before reshaping:\n") print(arr1) # Reshape array arr3D = arr1.reshape(1,4,3) print("\nReshaped array:") print(arr3D)
Kami sekarang telah membuat larik 3D dengan 12 elemen yang sama dengan larik asli arr1
.
Original array, before reshaping: [ 1 2 3 4 5 6 7 8 9 10 11 12] Reshaped array: [[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]]
Cara Men-debug Kesalahan Nilai Selama Pembentukan Ulang
Jika Anda ingat sintaksnya, pembentukan ulang hanya valid jika produk dimensi sama dengan jumlah elemen dalam larik.
import numpy as np arr1 = np.arange(1,13) print("Original array, before reshaping:\n") print(arr1) # Reshape array arr2D = arr1.reshape(4,4) print("\nReshaped array:") print(arr2D)
Di sini, Anda mencoba untuk membentuk kembali array 12 elemen menjadi array 4x4 dengan 16 elemen. Interpreter melempar Value Error, seperti yang terlihat di bawah ini.
Original array, before reshaping: [ 1 2 3 4 5 6 7 8 9 10 11 12] ----------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-11-63552bcc8c37> in <module>() 6 7 # Reshape array ----> 8 arr2 = arr1.reshape(4,4) 9 print("\nReshaped array:") 10 print(arr2) ValueError: cannot reshape array of size 12 into shape (4,4)
Untuk menghindari kesalahan seperti itu, Anda dapat menggunakan -1 untuk menyimpulkan bentuk secara otomatis untuk salah satu dimensi—berdasarkan jumlah total elemen.
Misalnya, jika Anda mengetahui n – 1 dimensi sebelumnya, Anda dapat menggunakan -1 untuk menyimpulkan dimensi ke-n dalam larik yang dibentuk ulang.
Jika Anda memiliki larik 24 elemen dan Anda ingin membentuknya kembali menjadi larik 3D. Misalkan Anda membutuhkan 3 baris dan 4 kolom. Anda dapat meneruskan nilai -1 di sepanjang dimensi ketiga.
import numpy as np arr1 = np.arange(1,25) print("Original array, before reshaping:\n") print(arr1) # Reshape array arr_res = arr1.reshape(4,3,-1) print("\nReshaped array:") print(arr_res) print(f"Shape of arr_res:{arr_res.shape}")
Saat Anda memeriksa bentuk array bentuk, Anda dapat melihat bahwa array yang dibentuk ulang memiliki bentuk 2 di sepanjang dimensi ketiga.
Original array, before reshaping: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24] Reshaped array: [[[ 1 2] [ 3 4] [ 5 6]] [[ 7 8] [ 9 10] [11 12]] [[13 14] [15 16] [17 18]] [[19 20] [21 22] [23 24]]] Shape of arr_res:(4, 3, 2)
Ini sangat membantu dalam meratakan array. Dan Anda akan mempelajarinya di bagian berikutnya.
Gunakan NumPy reshape() untuk Meratakan Array
Ada kalanya Anda harus kembali dari array N-dimensi ke array yang diratakan. Misalkan Anda ingin meratakan gambar menjadi vektor piksel yang panjang.
Mari buat kode contoh sederhana menggunakan langkah-langkah berikut:
- Buat larik gambar skala abu-abu 3 x 3,
img_arr
—dengan piksel dalam rentang 0 hingga 255. - Selanjutnya, ratakan
img_arr
ini dan cetak array yang diratakan,flat_arr
. - Juga, cetak bentuk
img_arr
danflat_arr
untuk memverifikasi.
img_arr = np.random.randint(0, 255, (3,3)) print(img_arr) print(f"Shape of img_arr: {img_arr.shape}") flat_arr = img_arr.reshape(-1) print(flat_arr) print(f"Shape of flat_arr: {flat_arr.shape}")
Berikut outputnya.
[[195 145 77] [ 63 193 223] [215 43 36]] Shape of img_arr: (3, 3) [195 145 77 63 193 223 215 43 36] Shape of flat_arr: (9,)
Pada sel kode di atas, Anda dapat melihat bahwa flat_arr
adalah vektor 1D dari nilai piksel dengan 9 elemen.
Menyimpulkan
Saatnya untuk meninjau kembali apa yang telah kita pelajari dengan cepat.
- Gunakan np.reshape(arr, newshape) untuk membentuk kembali arr menjadi bentuk yang ditentukan dalam newshape . newshape adalah tuple yang menentukan dimensi array yang dibentuk kembali.
- Atau, gunakan arr.reshape(d0, d1, …, dn) untuk membentuk kembali arr menjadi bentuk d0 x d1 x … x dn
- Periksa apakah d0 * d1 * …* dn = N , jumlah elemen dalam larik asli, untuk menghindari Kesalahan Nilai selama pembentukan ulang.
- Gunakan -1 untuk paling banyak satu dimensi dalam bentuk baru jika Anda ingin dimensi disimpulkan secara otomatis.
- Terakhir, Anda dapat menggunakan arr.reshape(-1) untuk meratakan array.
Sekarang setelah Anda mengetahui cara menggunakan NumPy reshape(), pelajari cara kerja fungsi NumPy linspace().
Anda dapat mencoba contoh kode di notebook Jupyter jika Anda mau. Jika Anda mencari lingkungan pengembangan lain, lihat panduan kami tentang alternatif Jupyter.