如何在 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)