首頁 > 後端開發 > Python教學 > 如何透過跨步從 NumPy 數組高效建立子數組?

如何透過跨步從 NumPy 數組高效建立子數組?

Susan Sarandon
發布: 2024-12-02 18:18:11
原創
986 人瀏覽過

How to Efficiently Create Subarrays from a NumPy Array with a Stride?

使用Stride/Stepsize 從Numpy 數組中獲取子數組

在這種情況下,我們討論了一種在Python NumPy 中從NumPy 建立子數組的有效方法給定具有特定步長的數組。

為了實現這一點,我們探索了兩個方法:

1.廣播方法:

def broadcasting_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    return a[S * np.arange(nrows)[:, None] + np.arange(L)]
登入後複製

在此方法中,廣播用於建立步幅矩陣。

2.高效 NumPy 步幅方法:

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))
登入後複製

此方法利用 NumPy 的高效步幅來建立子數組矩陣。

範例:

考慮一個陣列a:

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

要建立長度為 5、步幅為 3的子數組,我們可以使用以下任一方法:

subarrays_broadcasting = broadcasting_app(a, L=5, S=3)
subarrays_strides = strided_app(a, L=5, S=3)
登入後複製

兩種方法都會產生以下結果:

[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]
登入後複製

以上是如何透過跨步從 NumPy 數組高效建立子數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板