ホームページ > バックエンド開発 > Python チュートリアル > カスタム ストライドを使用して NumPy サブ配列を効率的に作成するにはどうすればよいですか?

カスタム ストライドを使用して NumPy サブ配列を効率的に作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-30 22:18:12
オリジナル
373 人が閲覧しました

How to Efficiently Create NumPy Subarrays with Custom Strides?

カスタム ストライドを使用した NumPy サブ配列

指定されたストライドを使用して NumPy 配列からサブ配列を作成することは、いくつかの方法で実現できます。ここでは 2 つの効率的なアプローチを示します。

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

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)]
ログイン後にコピー

ストライド アプローチ:

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))
ログイン後にコピー

例:

NumPy 配列 a:

a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
ログイン後にコピー

ストライド 3 で長さ 5 の部分配列を作成するには、次のいずれかのアプローチを使用できます。

broadcasting_result = broadcasting_app(a, L=5, S=3)

strided_result = strided_app(a, L=5, S=3)

print(broadcasting_result)
>> [[ 1  2  3  4  5]
   [ 4  5  6  7  8]
   [ 7  8  9 10 11]]

print(strided_result)
>> [[ 1  2  3  4  5]
   [ 4  5  6  7  8]
   [ 7  8  9 10 11]]
ログイン後にコピー

どちらのアプローチでも、目的の部分配列行列が効果的に得られます。

以上がカスタム ストライドを使用して NumPy サブ配列を効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート