ホームページ >バックエンド開発 >Python チュートリアル >NumPy でストライドを含む部分配列を効率的に抽出するにはどうすればよいですか?

NumPy でストライドを含む部分配列を効率的に抽出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 18:05:16266ブラウズ

How to Efficiently Extract Subarrays with Strides in NumPy?

Numpy 配列のストライドを使用したサブ配列の抽出

Python Numpy 配列を考えてみましょう:

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

長さ 5 の部分配列をストライド 3 で抽出します。結果は次の内容の行列になります:

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

よりクリーンな実装

for ループアプローチは実行可能ですが、Numpy はより効率的なメソッドを提供します:

アプローチ 1:ブロードキャスト

このアプローチはブロードキャストを利用します:

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

アプローチ 2: ストライドの最適化

このメソッドは Numpy の効率的なstrides:

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

使用例:

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

これらのアプローチは、Numpy 配列内のストライドを持つ部分配列を抽出するための、より効率的で最適化されたソリューションを提供します。

以上がNumPy でストライドを含む部分配列を効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。