Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mengeluarkan Subarrays dengan Cekap dengan Langkah Diberi daripada Susunan NumPy?

Bagaimana untuk Mengeluarkan Subarrays dengan Cekap dengan Langkah Diberi daripada Susunan NumPy?

Patricia Arquette
Lepaskan: 2024-12-09 21:18:10
asal
836 orang telah melayarinya

How to Efficiently Extract Subarrays with a Given Stride from a NumPy Array?

Mengambil Subarray daripada Numpy Array dengan Langkah/Saiz Langkah yang Diberikan dengan Cekap

Dalam dunia analisis data, selalunya kita perlu mengekstrak subarray dengan khusus langkah atau saiz langkah daripada tatasusunan yang lebih besar. Numpy, perpustakaan Python yang popular untuk operasi berangka, menawarkan beberapa kaedah untuk mencapai ini dengan cekap.

Pernyataan Masalah:
Memandangkan tatasusunan Numpy, kami ingin mengekstrak matriks subarray bagi panjang tetap dengan langkah atau saiz langkah tertentu. Selangkah ialah jarak antara permulaan subarray berturut-turut.

Perbincangan:

Satu cara mudah untuk mencipta subarray adalah dengan mengulangi tatasusunan asal menggunakan gelung untuk . Walaupun pendekatan ini berfungsi, ia boleh menjadi perlahan untuk tatasusunan yang besar.

Pendekatan 1: Penyiaran

Mekanisme penyiaran NumPy membolehkan kami mencipta subarray tanpa gelung. Kita boleh menggunakan fungsi berikut yang mengambil tatasusunan, panjang subarray (L) dan langkah (S):

def broadcasting_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    return a[S * np.arange(nrows)[:, None] + np.arange(L)]
Salin selepas log masuk

Penjelasan:
np.arange(nrows) mencipta tatasusunan indeks dengan langkah 1. Dengan mendarab ini dengan S, kita mendapat indeks permulaan bagi setiap subarray. Kami kemudian menyiarkan indeks ini merentasi baris a untuk mendapatkan subarray.

Pendekatan 2: NumPy Strides

Kaedah lain yang cekap menggunakan ciri langkah NumPy. Langkah mewakili bilangan bait antara elemen berturut-turut di sepanjang setiap paksi. Kami boleh menggunakan maklumat ini untuk mencipta subarray:

def strided_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a, shape=(nrows, L), strides=(S * n, n))
Salin selepas log masuk

Penjelasan:
Kami menggunakan np.lib.stride_tricks.as_strided untuk membentuk semula dengan mengambil kesempatan daripada langkahnya. Tatasusunan yang terhasil mempunyai bilangan baris (nrows) dan panjang subarray (L) yang dikehendaki, sambil mengekalkan langkah S.

Kod Contoh:

Untuk menggambarkan pendekatan:

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

print(broadcasting_app(a, L=5, S=3))
print(strided_app(a, L=5, S=3))
Salin selepas log masuk

Output:

[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]
[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]
Salin selepas log masuk

Kedua-dua pendekatan dengan cekap menjana matriks subarray dengan langkah yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Subarrays dengan Cekap dengan Langkah Diberi daripada Susunan NumPy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan