9
可以說我有一個數組:如何在固定大小的塊中分割具有或不具有重疊的numpy數組?
>>> arr = np.array(range(9)).reshape(3, 3)
>>> arr
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
我想創建一個函數f(arr, shape=(2, 2))
,是以陣列和形狀,並拆分陣列到給定的形狀的塊而不填充。因此,必要時可以通過重疊某些部分。例如:
>>> f(arr, shape=(2, 2))
array([[[[0, 1],
[3, 4]],
[[1, 2],
[4, 5]]],
[[[3, 4],
[6, 7]],
[[4, 5],
[7, 8]]]])
我設法創建輸出以上與np.lib.stride_tricks.as_strided(arr, shape=(2, 2, 2, 2), strides=(24, 8, 24, 8))
。但我不知道如何將其推廣到所有數組和所有塊大小。
優選地,對於3D陣列。
如果不需要重疊,應該避免這種情況。又如:
>>> arr = np.array(range(16).reshape(4,4)
>>> arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> f(arr, shape=(2,2))
array([[[[0, 1],
[4, 5]],
[[2, 3],
[6, 7]]],
[[[8, 9],
[12, 13]],
[[10, 11],
[14, 15]]]])
skimage.util.view_as_blocks
接近,但需要在陣列和塊的形狀是兼容的。
我應該更清楚一些,如果有必要,我只希望它們重疊。我將提供另一個例子。謝謝。 – V1ncam
@Divakar說我有一個A.shape =(n,m,n)的數組A,我想拉動A [i,j,k]周圍的26個元素(即A [i + 1,j,k ],A [i-1,j + 1,k-1]等) 我想view_as_blocks(A,(3,3,3))會接近我想要的 - 但是如何修復A [i,j,k]是塊的中心元素而不是角元素?我希望這是有道理的。請問我的數組只是view_as_blocks(A,(3,3,3))[i + 1,j + 1,k + 1]? – kevinkayaks