我正在尝试用Python折叠fits数据立方体。我知道有专门的软件包在做这件事,但这只是为了演讲。我首先在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:Index26超出了大小为26的轴1的界限。 我知道python以不同的方式处理多维数据集维度,例如Z、Y、X,而不是像IDL那样处理X、Y、Z,但我不明白为什么会出现错误
Python范围以0开头。X的范围为0-25。对于Y和Z是相同的。 也许简单的双循环子立方体和新的列表创建可以帮助你?
z_flatten = [[sum(col) for col in row] for row in subcube]
Python索引从0开始。您需要在for循环中执行
range(xdim)
和range(ydim)
现有的答案指出Python是0索引的,这是正确的,但是还没有人指出您甚至不需要使用
np.zeros
或使用任何for
循环来创建空数组Numpy已经允许您沿阵列的特定轴应用大多数操作,而不是在子立方体的维度上循环,一次只求和一个像素
例如,让我们制作一个3x4x4数据立方体:
假设您要将此立方体的3x3切片的所有层相加:
在你的情况下,等价物是
这相当于您正在尝试的操作,但效率要高得多
一般来说,尽管您从FITS文件中读取数据立方体,但由于
astropy.io.fits
返回一个Numpy数组,因此您可以找到的关于Numpy数组的任何文档或问题通常都适用于它,因为它来自FITS文件在这一点上并不重要。我指出这一点,只是因为如果您正在努力在Numpy阵列上执行操作,它可能会在将来对您有所帮助相关问题 更多 >
编程相关推荐