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])
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]])
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)]
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))
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]]
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!