我有一個看起來像這樣的二維陣列:
>>> X
array([[10, 15],
[20, 25],
[30, 35],
[40, 45],
[50, 55],
[60, 65],
[70, 75],
[80, 85],
[90, 95]])
>>> X.shape
(9, 2)
我的目標是為每一行創建一個包含 3 個步驟的新 3D 陣列:
>>> Y
array([[[10, 15],
[20, 25],
[30, 35]],
[[20, 25],
[30, 35],
[40, 45]],
[[30, 35],
[40, 45],
[50, 55]],
[[40, 45],
[50, 55],
[60, 65]],
[[50, 55],
[60, 65],
[70, 75]],
[[60, 65],
[70, 75],
[80, 85]],
[[70, 75],
[80, 85],
[90, 95]]])
>>> Y.shape
(7, 3, 2)
我想知道是否有任何簡單的方法可以做到這一點,而無需使用回圈。
uj5u.com熱心網友回復:
一個純粹的 numpy 解決方案是使用numpy.lib.stride_tricks.sliding_window_view:
from numpy.lib.stride_tricks import sliding_window_view
new_a = sliding_window_view(a, window_shape=(3,2)).reshape(7, 3, 2)
輸出:
>>> new_a
array([[[10, 15],
[20, 25],
[30, 35]],
[[20, 25],
[30, 35],
[40, 45]],
[[30, 35],
[40, 45],
[50, 55]],
[[40, 45],
[50, 55],
[60, 65]],
[[50, 55],
[60, 65],
[70, 75]],
[[60, 65],
[70, 75],
[80, 85]],
[[70, 75],
[80, 85],
[90, 95]]])
uj5u.com熱心網友回復:
使用 Pandas 非常容易,使用DataFrame.rolling:
df = pd.DataFrame(a)
new_a = np.array([w.to_numpy() for w in df.rolling(3) if len(w) == 3])
輸出:
>>> new_a
array([[[10, 15],
[20, 25],
[30, 35]],
[[20, 25],
[30, 35],
[40, 45]],
[[30, 35],
[40, 45],
[50, 55]],
[[40, 45],
[50, 55],
[60, 65]],
[[50, 55],
[60, 65],
[70, 75]],
[[60, 65],
[70, 75],
[80, 85]],
[[70, 75],
[80, 85],
[90, 95]]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/389945.html
標籤:麻木的
