Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Cara Paling Cekap untuk Memetakan Fungsi ke atas Tatasusunan NumPy?

Apakah Cara Paling Cekap untuk Memetakan Fungsi ke atas Tatasusunan NumPy?

Barbara Streisand
Barbara Streisandasal
2025-01-04 03:50:39429semak imbas

What's the Most Efficient Way to Map Functions Over a NumPy Array?

Strategi Pemetaan Array Numpy yang Cekap

Apabila ia berkaitan dengan fungsi pemetaan ke atas tatasusunan Numpy, kecekapan prestasi adalah penting. Satu persoalan asas timbul: "Apakah pendekatan yang paling cekap untuk operasi pemetaan?"

Pendekatan Tidak Cekap: Pemahaman Senarai Python

Contoh yang disediakan dalam soalan menggunakan senarai kefahaman:

squares = np.array([squarer(xi) for xi in x])

Walaupun pendekatan ini berkesan, pendekatan ini mempunyai ketidakcekapan yang wujud akibat penukaran perantaraan daripada senarai Python kembali kepada tatasusunan Numpy.

Strategi Dioptimumkan

Menguji pelbagai kaedah, penyelesaian optimum muncul:

1. Gunakan Fungsi Numpy Terbina Dalam:

Jika fungsi yang anda petakan sudah divektorkan dalam Numpy (cth., x^2), menggunakannya secara langsung menawarkan prestasi unggul:

squares = x ** 2

2. Vektorisasi dengan numpy.vectorize:

Untuk fungsi tersuai, vektorisasi dengan numpy.vectorize menunjukkan peningkatan kelajuan yang ketara:

f = lambda x: x ** 2
vf = np.vectorize(f)
squares = vf(x)

3. numpy.fromiter:

Pendekatan ini mencipta iterator daripada fungsi dan menggunakan numpy.fromiter untuk membina tatasusunan Numpy dengan cekap:

squares = np.fromiter((squarer(xi) for xi in x), x.dtype)

4. numpy.array(list(map(...)):

Alternatif lain yang dioptimumkan ialah menggunakan peta dan kemudian menukarnya kepada tatasusunan Numpy:

squares = np.array(list(map(squarer, x)))

Tanda aras dijalankan menggunakan perfplot menunjukkan bahawa kaedah yang dioptimumkan ini mengatasi pendekatan pemahaman senarai asal dengan margin yang ketara.

Atas ialah kandungan terperinci Apakah Cara Paling Cekap untuk Memetakan Fungsi ke atas Tatasusunan NumPy?. 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