将 4x4x3 矩阵拆分为 4 个单独的 2x2x3 矩阵
Split 4x4x3 matrix into 4 individual 2x2x3 matrixes
我想将 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
returns (3, 3, 1, 2, 2, 3)
当我期待更像 (4, 2, 2, 3)
的东西时,甚至是长度为 4 且 [=15= 的矩阵列表] 我不需要使用 skimage 来做到这一点,numpy 也可以。
如果这是 data
和输入 (4,4)
的二维问题,我希望输出是 4 个矩阵:
[[1,2,
5,6]]
[[3,4,
7,8]]
[[9,10,
13,14]]
[[11,12,
15,16]]
view_as_windows
returns 重叠 window 视图到同一个数组中。您的数组有 3x3 这样的 windows,从 (row, col) 坐标 (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), ( 1、2)、(2、0)、(2、1)和(2、2)。您似乎想要 nonoverlapping windows,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))
我想将 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
returns (3, 3, 1, 2, 2, 3)
当我期待更像 (4, 2, 2, 3)
的东西时,甚至是长度为 4 且 [=15= 的矩阵列表] 我不需要使用 skimage 来做到这一点,numpy 也可以。
如果这是 data
和输入 (4,4)
的二维问题,我希望输出是 4 个矩阵:
[[1,2,
5,6]]
[[3,4,
7,8]]
[[9,10,
13,14]]
[[11,12,
15,16]]
view_as_windows
returns 重叠 window 视图到同一个数组中。您的数组有 3x3 这样的 windows,从 (row, col) 坐标 (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), ( 1、2)、(2、0)、(2、1)和(2、2)。您似乎想要 nonoverlapping windows,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))