Apa kelebihan NumPy dibandingkan daftar Python biasa?
Saya memiliki sekitar 100 seri pasar keuangan, dan saya akan membuat array kubus 100x100x100 = 1 juta sel. Saya akan melakukan regresi (3-variabel) setiap x dengan masing-masing y dan z, untuk mengisi array dengan kesalahan standar.
Saya telah mendengar bahwa untuk "matriks besar" saya harus menggunakan NumPy sebagai lawan dari daftar Python, untuk alasan kinerja dan skalabilitas. Masalahnya, saya tahu daftar Python dan mereka tampaknya bekerja untuk saya.
Apa manfaatnya jika saya pindah ke NumPy?
Bagaimana jika saya memiliki 1000 seri (yaitu, 1 miliar sel floating point di kubus)?
getsizeof
tidak dapat diandalkan. Dokumentasi dengan jelas menyatakan bahwa: Hanya konsumsi memori yang secara langsung dikaitkan dengan objek dipertanggungjawabkan, bukan konsumsi memori objek yang dimaksud. Ini berarti bahwa jika Anda memiliki daftar python bersarang ukuran elemen tidak diperhitungkan.getsizeof
pada daftar hanya memberi tahu Anda berapa banyak RAM yang dikonsumsi oleh objek daftar itu dan RAM yang dikonsumsi oleh pointer dalam larik datanya, ia tidak memberi tahu Anda berapa banyak RAM yang dikonsumsi oleh objek yang dirujuk oleh pointer tersebut.float
(4 byte) akan diterjemahkan menjadi sesuatu yang lebih dekat dengan 32 GBlist
s dan Pythonfloat
(yang sebenarnya adalah Cdouble
s), bukan 12 GB; masing-masingfloat
pada 64 bit Python menempati ~ 24 byte (dengan asumsi tidak ada kerugian perataan dalam pengalokasi), ditambah 8 byte lainnya dilist
untuk menyimpan referensi (dan yang mengabaikan keseluruhan lokasi dan header objek untuklist
s sendiri, yang mungkin menambahkan GB lain tergantung pada persis berapa banyak keseluruhan penempatan terjadi).NumPy tidak hanya lebih efisien; ini juga lebih nyaman. Anda mendapatkan banyak operasi vektor dan matriks secara gratis, yang terkadang memungkinkan seseorang untuk menghindari pekerjaan yang tidak perlu. Dan mereka juga diimplementasikan secara efisien.
Misalnya, Anda bisa membaca kubus Anda langsung dari file ke dalam array:
Jumlahkan sepanjang dimensi kedua:
Temukan sel mana di atas ambang batas:
Hapus setiap irisan genap di sepanjang dimensi ketiga:
Juga, banyak pustaka yang berguna bekerja dengan array NumPy. Misalnya, analisis statistik dan visualisasi perpustakaan.
Bahkan jika Anda tidak memiliki masalah kinerja, mempelajari NumPy sepadan dengan usaha.
sumber
Alex menyebutkan efisiensi memori, dan Roberto menyebutkan kenyamanan, dan ini adalah poin bagus. Untuk beberapa ide lagi, saya akan menyebutkan kecepatan dan fungsionalitas .
Fungsionalitas: Anda mendapatkan banyak hal dengan NumPy, FFT, convolutions, pencarian cepat, statistik dasar, aljabar linier, histogram, dll. Dan sungguh, siapa yang dapat hidup tanpa FFT?
Kecepatan: Inilah tes untuk melakukan penjumlahan pada daftar dan larik NumPy, menunjukkan bahwa jumlah pada larik NumPy adalah 10x lebih cepat (dalam tes ini - jarak tempuh dapat bervariasi).
yang pada sistem saya (saat saya menjalankan cadangan) memberikan:
sumber
Inilah jawaban yang bagus dari FAQ di situs scipy.org :
Apa kelebihan yang ditawarkan array NumPy dibandingkan daftar Python (bersarang)?
sumber
Semua telah menyoroti hampir semua perbedaan utama antara array numpy dan daftar python, saya hanya akan menjelaskannya di sini:
Array numpy memiliki ukuran tetap pada pembuatan, tidak seperti daftar python (yang dapat tumbuh secara dinamis). Mengubah ukuran ndarray akan membuat array baru dan menghapus yang asli.
Elemen-elemen dalam array Numpy semua harus dari tipe data yang sama (kita bisa memiliki tipe heterogen juga tetapi itu tidak akan mengizinkan Anda operasi matematika) dan dengan demikian akan menjadi ukuran yang sama dalam memori
Array numpy difasilitasi kemajuan matematika dan jenis operasi lainnya pada sejumlah besar data. Biasanya operasi seperti ini dieksekusi lebih efisien dan dengan kode lebih sedikit daripada yang dimungkinkan dengan menggunakan rangkaian ular sanca
sumber