将维度为 [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)
我正在 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)