【问题标题】:How to sum a data cube with python如何用python求和一个数据立方体
【发布时间】:2021-06-16 22:16:50
【问题描述】:

我正在尝试使用 Python 折叠拟合数据立方体。我知道特殊的软件包正在这样做,但它是出于讲座的目的。我首先在 Z 中提取一个子立方体: hdu.data = hdu.data[3365:3405, :, :] subcube = hdu.data 子立方体的维度为 Z=40、Y=50 和 X=26。我想通过 X 和 Y 中的双循环以各种方式折叠立方体,以获得简单的 2D 图像。

for i in range(1, xdim):
    for j in range(1, ydim):    
        Sum[j,i] = subcube[:,j,i].sum()

我收到一条错误消息:IndexError: index 26 is out of bounds for axis 1 with size 26. 我知道 python 处理多维数据集维度的方式不同,例如 Z、Y、X 而不是 X、Y、Z,例如 IDL,但我不知道为什么会出现错误。

【问题讨论】:

    标签: python sum cube fits


    【解决方案1】:

    Python 索引从 0 开始。您需要在 for 循环中执行 range(xdim)range(ydim)

    【讨论】:

    • 大家好。谢谢你的帮助。我曾尝试在一个版本中从 0 开始循环,但没有成功。但仔细观察,我意识到我没有正确“声明”数组:Sum = np.zeros([xdim,ydim]),而不是 Sum = np.zeros([ydim,xdim]) !愚蠢的错误....谢谢
    【解决方案2】:

    Python 范围从 0 开始。X 的范围是 0-25。对于 Y 和 Z 相同。 也许使用新列表创建对子立方体进行简单的双循环可以帮助您? z_flatten = [[sum(col) for col in row] for row in subcube]

    【讨论】:

      【解决方案3】:

      指出 Python 是 0 索引的现有答案是正确的,但没有人指出您甚至不需要使用 np.zeros 创建一个空数组或使用任何 for 循环来执行此操作.

      Numpy 已经允许您沿数组的特定 应用大多数操作,而不是循环遍历子立方体的维度并一次仅求和一个像素。

      例如,让我们制作一个 3x4x4 的数据立方体:

      >>> cube = np.arange(3 * 4 * 4).reshape((3, 4, 4))
      >>> cube
      array([[[ 0,  1,  2,  3],
              [ 4,  5,  6,  7],
              [ 8,  9, 10, 11],
              [12, 13, 14, 15]],
      
             [[16, 17, 18, 19],
              [20, 21, 22, 23],
              [24, 25, 26, 27],
              [28, 29, 30, 31]],
      
             [[32, 33, 34, 35],
              [36, 37, 38, 39],
              [40, 41, 42, 43],
              [44, 45, 46, 47]]])
      

      假设您想对这个立方体的 3x3 切片的所有层求和:

      >>> cube[:, :3, :3].sum(axis=0)
      array([[48, 51, 54],
             [60, 63, 66],
             [72, 75, 78]])
      

      在你的情况下,相当于

      subcube[:, :ydim, :xdim].sum(axis=0)
      

      这与您尝试执行的操作相同,但效率更高。

      作为一般说明,尽管您从 FITS 文件中读取数据立方体,但由于 astropy.io.fits 返回 Numpy 数组,因此您可以找到有关 Numpy 数组的任何文档或问题都适用——它通常并不重要指出它来自 FITS 文件。我指出这一点,只是因为如果您将来难以对 Numpy 数组执行操作,它可能会对您有所帮助。

      【讨论】:

      • 非常感谢您的帮助,非常感谢。 H
      猜你喜欢
      • 1970-01-01
      • 2022-07-18
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多