我想將 3d 矩陣拆分為大小相等的較小矩陣。在這種情況下,一個 4x4x3 矩陣變成了 4 個 2x2x3 的單獨矩陣。我正在嘗試這個:
import numpy as np
from skimage.util.shape import view_as_windows
#create 4x4
data = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]])
#make 3 dimensional
stacked = np.dstack([data, data, data])
#split it
windows = view_as_windows(stacked, (2,2,3))
但是當我期待更多類似的東西時windows.shape回傳,或者甚至是長度為 4 的矩陣串列,并且我不需要使用 skimage 來執行此操作,numpy 其他都可以。(3, 3, 1, 2, 2, 3)(4, 2, 2, 3)(2,2,3)
data如果這是輸入的 2d 問題,(4,4)我希望輸出為 4 個矩陣:
[[1,2,
5,6]]
[[3,4,
7,8]]
[[9,10,
13,14]]
[[11,12,
15,16]]
uj5u.com熱心網友回復:
view_as_windows將重疊的視窗視圖回傳到同一個陣列中。您的陣列有 3x3 個這樣的視窗,從 (row, col) 坐標 (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2) 開始, (2, 0), (2, 1) 和 (2, 2)。您似乎想要scikit-image 呼叫的非重疊view_as_blocks視窗:
import numpy as np
from skimage.util import view_as_blocks
matrix = np.random.random((4, 4, 3))
blocked = view_as_blocks(matrix, (2, 2, 3))
print(blocked.shape)
這將列印:
(2, 2, 1, 2, 2, 3)
您的四個 (2, 2, 3) 矩陣位于上述陣列中的坐標 (0, 0, 0)、(0, 1, 0)、(1, 0, 0) 和 (1, 1, 0)。沿著最終軸仍然有一個塊的尺寸,即使該軸上只有一個塊。
你可以得到一個只有四個的線性陣列:
linearized = blocked.reshape((4, 2, 2, 3))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433840.html
標籤:python-3.x 麻木的 scikit 图像
下一篇:熊貓:計算資料框中列的相鄰差異
