Bagaimana skala array Python / Numpy dengan dimensi array yang meningkat?
Ini didasarkan pada beberapa perilaku yang saya perhatikan ketika membandingkan kode Python untuk pertanyaan ini: Cara mengekspresikan ekspresi rumit ini menggunakan irisan numpy
Masalahnya sebagian besar melibatkan pengindeksan untuk mengisi array. Saya menemukan bahwa keuntungan menggunakan (tidak-sangat-baik) versi Cython dan Numpy atas loop Python bervariasi tergantung pada ukuran array yang terlibat. Baik Numpy dan Cython mengalami keunggulan kinerja yang meningkat hingga titik tertentu (di suatu tempat sekitar untuk Cython dan N = 2000 untuk Numpy di laptop saya), setelah itu keuntungan mereka menurun (fungsi Cython tetap yang tercepat).
Apakah perangkat keras ini didefinisikan? Dalam hal bekerja dengan array besar, praktik terbaik apa yang harus dipatuhi untuk kode di mana kinerja dihargai?
Pertanyaan ini ( Mengapa Scaling Matriks-Vektor Multiplikasi saya? ) Mungkin tidak terkait, tapi saya tertarik mengetahui lebih banyak tentang bagaimana berbagai cara memperlakukan array dalam skala Python relatif satu sama lain.
sumber
Jawaban:
Ada beberapa hal yang salah dengan tolok ukur ini, sebagai permulaan, saya tidak menonaktifkan pengumpulan sampah dan saya mengambil jumlah, bukan waktu terbaik, tetapi menanggung dengan saya.
Haruskah orang khawatir tentang ukuran cache? Sebagai aturan umum, saya katakan tidak. Mengoptimalkannya dengan Python berarti membuat kode lebih rumit, untuk keuntungan kinerja yang meragukan. Jangan lupa bahwa objek Python menambahkan beberapa overhead yang sulit dilacak dan diprediksi. Saya hanya bisa memikirkan dua kasus di mana ini merupakan faktor yang relevan:
Dalam komentarnya, Evert menyebut CArray. Perhatikan bahwa, meskipun berfungsi, pengembangan telah berhenti dan telah ditinggalkan sebagai proyek mandiri. Fungsionalitas akan dimasukkan dalam Blaze sebagai gantinya, sebuah proyek yang sedang berlangsung untuk membuat "generasi baru Numpy".
sumber