Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa np.vectorize() Lebih cepat daripada df.apply() untuk Penciptaan Lajur Pandas?

Mengapa np.vectorize() Lebih cepat daripada df.apply() untuk Penciptaan Lajur Pandas?

Susan Sarandon
Susan Sarandonasal
2024-10-27 04:34:30841semak imbas

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Perbandingan Prestasi Panda diguna pakai vs np.vectorize

Telah diperhatikan bahawa np.vectorize() boleh jauh lebih cepat daripada df. apply() apabila mencipta lajur baharu berdasarkan lajur sedia ada dalam Pandas DataFrame. Perbezaan prestasi yang diperhatikan berpunca daripada mekanisme asas yang digunakan oleh kedua-dua kaedah ini.

df.apply() vs Python-Level Loops

df.apply() pada asasnya mencipta gelung peringkat Python yang berulang pada setiap baris DataFrame. Seperti yang ditunjukkan dalam penanda aras yang disediakan, gelung peringkat Python seperti pemahaman senarai dan peta semuanya agak perlahan berbanding dengan pengiraan vektor sebenar.

np.vectorize() vs df.apply()

np.vectorize() menukar fungsi yang ditentukan pengguna kepada fungsi universal (ufunc). Ufuncs sangat dioptimumkan dan boleh melakukan operasi mengikut elemen pada tatasusunan NumPy, memanfaatkan kod berasaskan C dan algoritma yang dioptimumkan. Ini berbeza dengan df.apply(), yang beroperasi pada objek Siri Pandas dan menimbulkan overhed tambahan.

Vektorisasi Benar: Prestasi Optimum

Untuk penciptaan lajur yang benar-benar cekap , pengiraan vektor dalam NumPy amat disyorkan. Operasi seperti numpy.where dan pembahagian langsung mengikut unsur dengan df["A"] / df["B"] adalah sangat pantas dan mengelakkan overhed yang dikaitkan dengan gelung.

Pengoptimuman Numba

Untuk kecekapan yang lebih besar, adalah mungkin untuk mengoptimumkan lagi gelung menggunakan Numba, pengkompil yang menterjemahkan fungsi Python kepada kod C yang dioptimumkan. Numba boleh mengurangkan masa pelaksanaan kepada mikrosaat, dengan ketara mengatasi prestasi kedua-dua df.apply() dan np.vectorize().

Kesimpulan

Sementara np.vectorize() mungkin menawarkan sedikit penambahbaikan berbanding df.apply(), ia bukan pengganti sebenar untuk pengiraan vektor dalam NumPy. Untuk mencapai prestasi maksimum, gunakan pengoptimuman Numba atau operasi vektor langsung dalam NumPy untuk penciptaan lajur baharu dalam Pandas DataFrames.

Atas ialah kandungan terperinci Mengapa np.vectorize() Lebih cepat daripada df.apply() untuk Penciptaan Lajur Pandas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn