首頁 >後端開發 >Python教學 >如何從 NumPy 數組中高效提取給定步長的子數組?

如何從 NumPy 數組中高效提取給定步長的子數組?

Patricia Arquette
Patricia Arquette原創
2024-12-09 21:18:10830瀏覽

How to Efficiently Extract Subarrays with a Given Stride from a NumPy Array?

以給定的步長/步長有效地從Numpy 數組中獲取子數組

在數據分析領域,我們經常需要數據分析領域,我們經常需要提取具有特定步長的子數組較大數組的步幅或步長。 Numpy 是一個流行的 Python 數值運算函式庫,它提供了多種方法來有效地實現此目的。

問題陳述:
給定 Numpy 數組,我們想要提取一個由以下子數組組成的矩陣具有特定步幅或步長的固定長度。步幅是連續子數組開頭之間的距離。

討論:

建立子陣列的直接方法是使用 for 迴圈迭代原始陣列。雖然這種方法有效,但對於大型陣列來說可能會很慢。

方法 1:廣播

NumPy 的廣播機制讓我們可以建立沒有循環的子陣列。我們可以使用下列函數來取得陣列、子陣列長度(L) 和步幅(S):

解釋:
np.arange(nrows) 建立步驟長為1 的索引數組。透過將其與 S 相乘,我們得到每個子數組的起始索引。然後,我們將這些索引廣播到 a 的行中以獲得子數組。

方法 2:NumPy Strides

另一個有效的方法是使用 NumPy 的 strides 功能。步幅表示沿每個軸的連續元素之間的位元組數。我們可以使用這些資訊來建立子陣列:

解釋:
我們使用np.lib.stride_tricks.as_strided 透過利用a 的步長來重塑a 的形狀。產生的陣列具有所需的行數 (nrows) 和子數組長度 (L),同時保持 S 的步長。

示例代碼:

來說明方法:

輸出:

兩種方法都可以有效地產生具有所需步長的子數組矩陣。

以上是如何從 NumPy 數組中高效提取給定步長的子數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn