Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mengekstrak Subarray dengan Cekap dengan Strides dalam NumPy?

Bagaimana untuk Mengekstrak Subarray dengan Cekap dengan Strides dalam NumPy?

Barbara Streisand
Lepaskan: 2024-12-03 18:05:16
asal
263 orang telah melayarinya

How to Efficiently Extract Subarrays with Strides in NumPy?

Pengekstrakan Subarray dengan Langkah dalam Tatasusunan Numpy

Pertimbangkan tatasusunan Python Numpy a:

a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
Salin selepas log masuk

Kami berhasrat untuk ekstrak subarrays panjang 5 dengan langkah 3. Ini menghasilkan matriks dengan yang berikut kandungan:

numpy.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
Salin selepas log masuk

Pelaksanaan Lebih Bersih

Walaupun pendekatan untuk gelung berdaya maju, Numpy menyediakan kaedah yang lebih cekap:

Pendekatan 1: Penyiaran

Pendekatan ini mengambil kesempatan penyiaran:

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

Pendekatan 2: Pengoptimuman Langkah

Kaedah ini menggunakan langkah cekap Numpy:

def strided_app(a, L, S ):  # Window len = L, Stride len/stepsize = 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

Contoh Penggunaan:

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

broadcasting_app(a, L = 5, S = 3)
# [[ 1  2  3  4  5]
#  [ 4  5  6  7  8]
#  [ 7  8  9 10 11]]

strided_app(a, L = 5, S = 3)
# [[ 1  2  3  4  5]
#  [ 4  5  6  7  8]
#  [ 7  8  9 10 11]]
Salin selepas log masuk

Ini pendekatan menawarkan penyelesaian yang lebih cekap dan dioptimumkan untuk mengekstrak subarray dengan langkah dalam tatasusunan Numpy.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Subarray dengan Cekap dengan Strides dalam 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