我有一個 np.arraya這樣的,a.shape = (10, 5)我想使用大小為 3 的滑動視窗,以便輸出陣列b.shape = (8, 15).
例如
i, j = np.ogrid[:10, :5]
a = 10*i j
print(a)
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[20, 21, 22, 23, 24],
[30, 31, 32, 33, 34],
[40, 41, 42, 43, 44],
[50, 51, 52, 53, 54],
[60, 61, 62, 63, 64],
[70, 71, 72, 73, 74],
[80, 81, 82, 83, 84],
[90, 91, 92, 93, 94]])
那么b應該是
array([[ 0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24],
[10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34],
[20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 40, 41, 42, 43, 44],
[30, 31, 32, 33, 34, 40, 41, 42, 43, 44, 50, 51, 52, 53, 54],
[40, 41, 42, 43, 44, 50, 51, 52, 53, 54, 60, 61, 62, 63, 64],
[50, 51, 52, 53, 54, 60, 61, 62, 63, 64, 70, 71, 72, 73, 74],
[60, 61, 62, 63, 64, 70, 71, 72, 73, 74, 80, 81, 82, 83, 84],
[70, 71, 72, 73, 74, 80, 81, 82, 83, 84, 90, 91, 92, 93, 94]])
我試過了,numpy.lib.stride_tricks.sliding_window_view但似乎不適用于這種情況。
uj5u.com熱心網友回復:
在這里您可以使用一個連接:
i, j = np.ogrid[:9, :5]
a = 10*i j #generate your array
b = np.concatenate( [a[:-2,:],a[1:-1,:],a[2:,:]],axis=1)
print(b)
#returns
array([[ 0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24],
[10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34],
[20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 40, 41, 42, 43, 44],
[30, 31, 32, 33, 34, 40, 41, 42, 43, 44, 50, 51, 52, 53, 54],
[40, 41, 42, 43, 44, 50, 51, 52, 53, 54, 60, 61, 62, 63, 64],
[50, 51, 52, 53, 54, 60, 61, 62, 63, 64, 70, 71, 72, 73, 74],
[60, 61, 62, 63, 64, 70, 71, 72, 73, 74, 80, 81, 82, 83, 84]])
您也可以為任何視窗大小執行此操作
windowSize = 3
nRows,nCols = a.shape
b =np.concatenate([a[c:nRows-(windowSize-c-1),:] for c in range(windowSize)],axis=1)
uj5u.com熱心網友回復:
使用numpy.lib.stride_tricks.sliding_window_view, 只需在扁平陣列上滑動并切片您想要的元素:
import numpy as np
np.lib.stride_tricks.sliding_window_view(a.ravel(), 15)[::a.shape[1]]
輸出:
array([[ 0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24],
[10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34],
[20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 40, 41, 42, 43, 44],
[30, 31, 32, 33, 34, 40, 41, 42, 43, 44, 50, 51, 52, 53, 54],
[40, 41, 42, 43, 44, 50, 51, 52, 53, 54, 60, 61, 62, 63, 64],
[50, 51, 52, 53, 54, 60, 61, 62, 63, 64, 70, 71, 72, 73, 74],
[60, 61, 62, 63, 64, 70, 71, 72, 73, 74, 80, 81, 82, 83, 84],
[70, 71, 72, 73, 74, 80, 81, 82, 83, 84, 90, 91, 92, 93, 94]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369783.html
