import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))
OUTPUT:
print(y.flatten())
[1 2 3 4 5 6 7 8 9]
print(y.ravel())
[1 2 3 4 5 6 7 8 9]
Kedua fungsi mengembalikan daftar yang sama. Lalu apa perlunya dua fungsi berbeda melakukan pekerjaan yang sama.
python
numpy
multidimensional-array
flatten
numpy-ndarray
cryptomanic
sumber
sumber
Jawaban:
API saat ini adalah:
flatten
selalu mengembalikan salinan.ravel
mengembalikan tampilan array asli jika memungkinkan. Ini tidak terlihat dalam output yang dicetak, tetapi jika Anda memodifikasi array yang dikembalikan oleh ravel, itu dapat memodifikasi entri dalam array asli. Jika Anda memodifikasi entri dalam array yang dikembalikan dari rata ini tidak akan pernah terjadi. ravel akan lebih cepat karena tidak ada memori yang disalin, tetapi Anda harus lebih berhati-hati dalam memodifikasi array yang dikembalikannya.reshape((-1,))
mendapat tampilan setiap kali langkah array memungkinkan, bahkan jika itu berarti Anda tidak selalu mendapatkan array yang berdekatan.sumber
a.flatten()
mendapatkan salinan untuk memastikan,a.ravel()
untuk menghindari sebagian besar salinan tetapi masih menjamin bahwa array yang dikembalikan bersebelahan, dana.reshape((-1,))
untuk benar-benar mendapatkan tampilan setiap kali langkah array memungkinkan bahkan jika itu berarti Anda tidak selalu mendapatkan array yang berdekatan.ravel
menjamin susunan yang berdekatan, dan karenanya tidak dijamin akan mengembalikan tampilan;reshape
selalu mengembalikan tampilan, dan karenanya tidak dijamin akan mengembalikan array yang berdekatan.reshape(-1)
setara denganreshape((-1,))
Sebagaimana dijelaskan di sini, perbedaan utama adalah:
flatten
adalah metode objek ndarray dan karenanya hanya dapat dipanggil untuk array numpy yang sebenarnya.ravel
adalah fungsi tingkat perpustakaan dan karenanya dapat dipanggil pada objek apa pun yang berhasil diurai.Misalnya
ravel
akan bekerja pada daftar ndarrays, sementaraflatten
tidak tersedia untuk jenis objek itu.@IH juga menunjukkan perbedaan penting dengan penanganan memori dalam jawabannya.
sumber
ndarray
'sBerikut adalah namespace yang benar untuk fungsinya:
numpy.ndarray.flatten
numpy.ravel
Kedua fungsi mengembalikan susunan 1D yang rata yang menunjuk ke struktur memori yang baru.
Dalam contoh atas:
Bagaimana kami memeriksa apakah ada salinannya? Menggunakan
.base
atributndarray
. Jika ini adalah tampilan, basis akan menjadi array asli; jika itu adalah salinan, basisnya adalahNone
.sumber