如何在 python 中获取 3d 数组的 n 块?
How to take n block of a 3d array in python?
我有 328 张灰度图像,大小为 128*128,我将它们全部转换为形状为 (128,128,328) 的 3D 数组。现在我想把它转换成 5 个独立的 3d 数组,形状为 (128,128,64),而不改变顺序。
如您所见,328 不能被 64 整除,使用 dsplit 函数不起作用。
有什么方法可以在深度轴上动态切片 3d 数组吗?
import numpy as np
arr = np.zeros(shape=(128,128,328))
# make aray divisible by 5 (trim it to the depth of 320)
arr = arr[:, :, :320]
# Split array
arrays = np.dsplit(arr, 5)
for array in arrays:
print(array.shape)
输出:
(128, 128, 64)
(128, 128, 64)
(128, 128, 64)
(128, 128, 64)
(128, 128, 64)
编辑:这是以动态方式编写的相同内容。
import numpy as np
num_subarrays = 5
subarray_depth = 64
# Initialize array
arr = np.zeros(shape=(128,128,328))
# make aray divisible by subarray_depth
arr = arr[:, :, :(arr.shape[2] // subarray_depth) * subarray_depth]
# Split array
arrays = np.dsplit(arr, num_subarrays)
for array in arrays:
print(array.shape)
我有 328 张灰度图像,大小为 128*128,我将它们全部转换为形状为 (128,128,328) 的 3D 数组。现在我想把它转换成 5 个独立的 3d 数组,形状为 (128,128,64),而不改变顺序。
如您所见,328 不能被 64 整除,使用 dsplit 函数不起作用。
有什么方法可以在深度轴上动态切片 3d 数组吗?
import numpy as np
arr = np.zeros(shape=(128,128,328))
# make aray divisible by 5 (trim it to the depth of 320)
arr = arr[:, :, :320]
# Split array
arrays = np.dsplit(arr, 5)
for array in arrays:
print(array.shape)
输出:
(128, 128, 64)
(128, 128, 64)
(128, 128, 64)
(128, 128, 64)
(128, 128, 64)
编辑:这是以动态方式编写的相同内容。
import numpy as np
num_subarrays = 5
subarray_depth = 64
# Initialize array
arr = np.zeros(shape=(128,128,328))
# make aray divisible by subarray_depth
arr = arr[:, :, :(arr.shape[2] // subarray_depth) * subarray_depth]
# Split array
arrays = np.dsplit(arr, num_subarrays)
for array in arrays:
print(array.shape)