Katakanlah saya punya array a
:
a = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
Saya ingin mengonversinya menjadi array 1D (yaitu vektor kolom):
b = np.reshape(a, (1,np.product(a.shape)))
tapi ini kembali
array([[1, 2, 3, 4, 5, 6]])
yang tidak sama dengan:
array([1, 2, 3, 4, 5, 6])
Saya bisa menggunakan elemen pertama array ini untuk mengubahnya secara manual menjadi array 1D:
b = np.reshape(a, (1,np.product(a.shape)))[0]
tetapi ini mengharuskan saya untuk mengetahui berapa banyak dimensi yang dimiliki array asli (dan menyatukan [0] ketika bekerja dengan dimensi yang lebih tinggi)
Apakah ada cara dimensi-independen untuk mendapatkan vektor kolom / baris dari ndarray yang arbitrer?
ravel()
mengembalikan tampilan, tetapi itu tidak selalu benar. Ada kasus di manaravel()
mengembalikan salinan. </pedantic>a.ravel()
terlihat sekitar tiga kali lebih cepata.reshape(-1)
.a.flatten()
lebih lambat, karena perlu membuat salinan.atau, cukup:
sumber
b = a.reshape(-1)
untuk pendek dalam contoh pertama.Salah satu cara paling sederhana adalah menggunakan
flatten()
, seperti contoh ini:Array saya seperti ini:
Setelah menggunakan
flatten()
:Ini juga solusi kesalahan jenis ini:
sumber
Untuk daftar array dengan ukuran berbeda gunakan sebagai berikut:
Keluaran:
[1 2 3 4 5 6 7 8]
sumber
a
punggungb
?Saya ingin melihat hasil tolok ukur fungsi yang disebutkan dalam jawaban termasuk unutbu .
Juga ingin menunjukkan bahwa numpy doc merekomendasikan untuk digunakan
arr.reshape(-1)
dalam tampilan kasus lebih disukai. (meskipunravel
sedikit lebih cepat dalam hasil berikut)Tolok ukur
Fungsi:
np.ravel
: mengembalikan tampilan, jika memungkinkannp.reshape(-1)
: mengembalikan tampilan, jika memungkinkannp.flatten
: mengembalikan salinannp.flat
: pengembaliannumpy.flatiter
. mirip denganiterable
versi numpy: '1.18.0'
Waktu eksekusi pada
ndarray
ukuran yang berbedaKesimpulan
Kode yang digunakan
sumber
Meskipun ini tidak menggunakan format array np, (untuk malas memodifikasi kode saya) ini harus melakukan apa yang Anda inginkan ... Jika, Anda benar-benar ingin vektor kolom Anda ingin mengubah hasil vektor. Itu semua tergantung pada bagaimana Anda berencana untuk menggunakan ini.
Jadi, jika Anda perlu mengubah posisi, Anda dapat melakukan sesuatu seperti ini:
sumber