我有 N 個元素的一維陣列。我需要根據不統一而是在輔助串列中指定的步幅在此陣列上創建一個 PxR 視圖(其中 PxR<N)。觀察輔助串列正好有 P 個元素。R是一個常數。
例子
INPUTS:
L=[10,14,4,12,3,85,43,22,11,7,10]
R=3
aux=[2,5,7]
output= [[4,12,3],[85,43,22],[22,11,7]]
綜合串列是一種選擇。
我的代碼:
output = [[L[a p] for p in range(R)] for a in aux]
但是,由于在我的情況下 L、R 和 aux 很大,如果有一個 numpy 函式可以更有效地完成這項作業,我會徘徊。
我正在探索 numpy.lib.stride_tricks.as_strided 作為一個選項。這會很棒,因為它還可以讓我減少記憶體占用。但似乎 as_stride 僅適用于恒定步幅......
有什么建議可以解決我的問題嗎?
uj5u.com熱心網友回復:
對于串列,這種串列理解是唯一的選擇。
但是如果我們從陣列開始:
In [298]: L=np.array([10,14,4,12,3,85,43,22,11,7,10])
...: R=3
...: aux=np.array([2,5,7])
我們可以創建一個索引陣列:
In [299]: idx = aux[:,None] np.arange(R)
In [300]: idx
Out[300]:
array([[2, 3, 4],
[5, 6, 7],
[7, 8, 9]])
In [301]: L[idx]
Out[301]:
array([[ 4, 12, 3],
[85, 43, 22],
[22, 11, 7]])
編輯
使用更安全、更簡單的版本作為 `as_strided:
In [323]: np.lib.stride_tricks.sliding_window_view(L,(3,))
Out[323]:
array([[10, 14, 4],
[14, 4, 12],
[ 4, 12, 3],
[12, 3, 85],
[ 3, 85, 43],
[85, 43, 22],
[43, 22, 11],
[22, 11, 7],
[11, 7, 10]])
In [324]: np.lib.stride_tricks.sliding_window_view(L,(3,))[[2,5,7]]
Out[324]:
array([[ 4, 12, 3],
[85, 43, 22],
[22, 11, 7]])
雖然 [323] 是 a view,但子集(和 [301])是一個副本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471431.html
上一篇:如何根據蒙版為灰度影像著色?
