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!