将维度为 [n, m] 的 x numpy 数组转换为维度为 [x, n, m] in Python 的单个数组

Turn x numpy arrays with dimensions [n, m] into a single array with dimensions [x, n, m] in Python

我正在 Python 中进行一些图像处理。我有一组灰度图像 (​​512 x 512) 保存在一个包含 201 张图像的堆叠 .tif 文件中。当我用 skimage.io.imread 打开这个文件时,它会生成一个尺寸为 [201, 512, 512] 的 3D 数组,让我可以轻松地遍历每个灰度图像——这正是我想要的。

在对这些图像执行一些操作后,我有一个包含十个二维数组的列表,我想将其放回 skimage.io.imread 生成的相同尺寸格式 - 即。 [10, 512, 512].

使用 numpy.dstack 生成维度为 [512, 512, 10] 的数组。而且 numpy.concatenate 也没有完成这项工作。

如何将这个 2D 数组列表转换为具有上面指定尺寸的 3D 数组?

一个解决方案是考虑你有一个形状数组 [512, 512, 10] 并将最后一个轴移动到第一个:

import numpy as np
imgs = np.random.random((512, 512, 10))

imgs = np.moveaxis(imgs, -1, 0)
print(imgs.shape)
# (10, 512, 512)

其他方法是使用 np.vstack() 像:

import numpy as np

# List of 10 images of size (512 x 512) each
imgs = [np.random.random((512, 512)) for _ in range(10)]

output = np.vstack([x[None, ...] for x in imgs])
print(output.shape)
# (10, 512, 512)

最通用的解决方案是使用普通 np.stack 并指定要添加到数组的轴。

采用 中的符号:

result = np.stack(imgs, axis=0)

这大致相当于只是做

result = np.array(imgs)