该问题类似于 Slice 2d array into smaller 2d arrays除了我使用张量( torch )并且我有一个 4D,而不是 2D,形状的张量,例如。 (3, 1, 32, 32) - 在我的例子中,它是 3 张尺寸为 32x32 的图像。
我想将 [i, 0, :, :] 形式的每个张量分割成更小的子数组,因此输出将具有例如形状。 (3, 16, 8, 8),其中每个 [:, j, :, :] 是从原始图像中剪切的一个小正方形。我找不到修改 4D 张量建议解决方案的方法。
我也尝试过只使用
subx = x.reshape(3, 16, 8, 8)
但这并没有按照我想要的方式 reshape 它。
最佳答案
reshape
不适用于此目的。您可以查看 skimage
的 view_as_blocks
,其中生成的 block 是输入数组的非重叠 View :
from skimage.util.shape import view_as_blocks
view_as_blocks(a, block_shape=(3,1,8,8)).reshape(3, 16, 8, 8)
关于python - 将 4d 张量切片为较小子张量的 4D 张量(仅在最后 2 个维度进行切片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60865167/