Apa perbedaan antara Numpy array()
dan asarray()
fungsinya? Kapan Anda harus menggunakan yang satu daripada yang lain? Mereka tampaknya menghasilkan output yang identik untuk semua input yang dapat saya pikirkan.
Karena pertanyaan lain sedang dialihkan ke pertanyaan yang menanyakan asanyarray
atau rutinitas pembuatan array lainnya , mungkin layak untuk memiliki ringkasan singkat tentang apa yang masing-masing lakukan.
Perbedaannya terutama tentang kapan mengembalikan input tidak berubah, sebagai lawan membuat array baru sebagai salinan.
array
menawarkan berbagai pilihan (sebagian besar fungsi lainnya adalah pembungkus tipis di sekitarnya), termasuk bendera untuk menentukan kapan harus menyalin. Penjelasan lengkap akan memakan waktu selama dokumen (lihat Array Creation , tetapi secara singkat, berikut adalah beberapa contoh:
Asumsikan a
adalah ndarray
, dan m
merupakan matrix
, dan mereka berdua memiliki dtype
dari float32
:
np.array(a)
dan np.array(m)
akan menyalin keduanya, karena itulah perilaku default.np.array(a, copy=False)
dan np.array(m, copy=False)
akan menyalin m
tetapi tidak a
, karena m
bukan ndarray
.np.array(a, copy=False, subok=True)
dan tidak np.array(m, copy=False, subok=True)
akan menyalin, karena m
a matrix
, yang merupakan subclass dari ndarray
.np.array(a, dtype=int, copy=False, subok=True)
akan menyalin keduanya, karena dtype
tidak kompatibel.Sebagian besar fungsi lainnya adalah pembungkus tipis di sekitar array
kontrol itu ketika penyalinan terjadi:
asarray
: Input akan dikembalikan tanpa disalin jika itu kompatibel ndarray
( copy=False
).asanyarray
: Input akan dikembalikan tanpa disalin jika kompatibel ndarray
atau subkelas seperti matrix
( copy=False
, subok=True
).ascontiguousarray
: Input akan dikembalikan tanpa disalin jika kompatibel ndarray
dengan urutan C yang berdekatan ( copy=False
, order='C')
.asfortranarray
: Input akan dikembalikan tanpa disalin jika itu kompatibel ndarray
dengan urutan Fortran ( copy=False
, order='F'
).require
: Input akan dikembalikan jika tidak dibuka, jika kompatibel dengan string persyaratan yang ditentukan.copy
: Masukan selalu disalin.fromiter
: Input diperlakukan sebagai iterable (jadi, misalnya, Anda dapat membuat array dari elemen iterator, alih-alih object
array dengan iterator); selalu disalin.Ada juga fungsi kenyamanan, seperti asarray_chkfinite
(aturan penyalinan yang sama seperti asarray
, tetapi memunculkan ValueError
jika ada nan
atau inf
nilai), dan konstruktor untuk subkelas seperti matrix
atau untuk kasus khusus seperti array rekaman, dan tentu saja ndarray
konstruktor yang sebenarnya (yang memungkinkan Anda membuat array secara langsung keluar dari langkah di atas buffer).
The definisi
asarray
yaitu:Jadi itu seperti
array
, kecuali ia memiliki lebih sedikit opsi, dancopy=False
.array
memilikicopy=True
secara default.Perbedaan utama adalah bahwa
array
(secara default) akan membuat salinan objek, sementaraasarray
tidak akan kecuali diperlukan.sumber
array([1, 2, 3])
atauasarray([1, 2, 3])
?[1, 2, 3]
adalah daftar Python, jadi salinan data harus dibuat untuk membuatnyandarary
. Jadi gunakannp.array
langsung daripadanp.asarray
yang akan mengirimcopy=False
parameter kenp.array
. Inicopy=False
diabaikan jika salinan harus dibuat seperti dalam kasus ini. Jika Anda membandingkan keduanya menggunakan%timeit
IPython, Anda akan melihat perbedaan untuk daftar kecil, tetapi tidak masalah yang Anda gunakan untuk daftar besar.np.asanyarray
?asarray
selalu mengembalikan sebuahndarray
.asanyarray
akan mengembalikan subkelasndarray
jika itu yang diteruskan ke sana. Sebagai contoh, annp.matrix
adalah subclass darindarray
. Jadinp.asanyarray(np.matrix(...))
mengembalikan matriks yang sama, sedangkannp.asarray(np.matrix(...))
mengkonversi matriks menjadindarray
.Perbedaannya dapat ditunjukkan dengan contoh ini:
menghasilkan matriks
gunakan
numpy.array
untuk memodifikasiA
. Tidak berfungsi karena Anda memodifikasi salinangunakan
numpy.asarray
untuk memodifikasiA
. Ini berhasil karena Anda memodifikasiA
sendiriSemoga ini membantu!
sumber
Perbedaan disebutkan cukup jelas dalam dokumentasi
array
danasarray
. Perbedaannya terletak pada daftar argumen dan karenanya tindakan fungsi tergantung pada parameter tersebut.Definisi fungsi adalah:
dan
Argumen berikut adalah argumen yang dapat diteruskan ke
array
dan tidakasarray
seperti yang disebutkan dalam dokumentasi:sumber
Berikut adalah contoh sederhana yang dapat menunjukkan perbedaannya.
Perbedaan utama adalah bahwa array akan membuat salinan data asli dan menggunakan objek yang berbeda, kita dapat memodifikasi data dalam array asli.
Isi dalam array (a), tetap tidak tersentuh, dan tetap saja, kita dapat melakukan operasi apa pun pada data menggunakan objek lain tanpa mengubah konten dalam array asli.
sumber
asarray(x)
sepertiarray(x, copy=False)
Gunakan
asarray(x)
ketika Anda ingin memastikan bahwa itux
akan menjadi array sebelum operasi lain dilakukan. Jikax
sudah merupakan array maka tidak ada salinan yang akan dilakukan. Itu tidak akan menyebabkan kinerja yang berlebihan.Berikut adalah contoh fungsi yang memastikan
x
dikonversi menjadi array terlebih dahulu.sumber