【问题标题】:Turn x numpy arrays with dimensions [n, m] into a single array with dimensions [x, n, m] in Python [duplicate]在Python中将具有[n,m]维度的x个numpy数组转换为具有[x,n,m]维度的单个数组[重复]
【发布时间】:2021-09-11 23:10:18
【问题描述】:

我正在用 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 数组?

【问题讨论】:

  • 恭喜,您现在拥有可以投票的声誉!

标签: python arrays numpy image-processing scikit-image


【解决方案1】:

一种解决方案是考虑您有一个形状为[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()like:

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)

【讨论】:

    【解决方案2】:

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

    取自@amrind's answer的符号:

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

    这大致相当于只是做

    result = np.array(imgs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 2016-07-02
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多