我正在使用h5py导入一个相当大的illustris galaxy模拟代码的hdf5文件。 如果有人想看,我在这里显示文件 - 它是1.96 GB。
https://drive.google.com/file/d/0B1Kj475OJBnuaFBIS2FhTFpvNkk/view?usp=sharing
我想拥有h5py和numpy显示数据表,使用numpy.sum对列和输出向量求和,并告诉文件只提取我想要的某些文件。这是一个每个星系大小为16X56的2D桌子。它是一个大型数据集,包含数百万个星系(近2GB数据)的数据,超过一百万行。
沿着表格的尺寸大小56:每个bin代表年龄。沿尺寸大小16求和,为每个星系提供一个大小为56的1维向量,代表恒星质量(在每个年龄区内形成1e ^ 10 M(太阳)的单位。
我的目标是使用python和h5py:
1-使用numpy查看数据数组并沿尺寸大小16求和以获得56个向量)在python中显示
2-具有numpy消除稳定的恒星形成率,以专门提取在1 Gyr前和2 Gyr之间突然发生爆发的星系,然后停止 - 有没有办法做到这一点?这将消除我必须通过的大量星系。这与E + A星系有关,这些星系经历了突然的爆发,然后停止了。一旦向量通过numpy求和,将显示的年龄箱如下:
在Gyr
<0.005,
0.005 - 0.015,
0.015 - 0.025,
0.025 - 0.035,
0.035 - 0.045,
0.045 - 0.055,
0.055 - 0.065,
0.065 - 0.075,
0.075 - 0.085,
0.085 - 0.095,
0.095 - 0.125,
0.125 - 0.175,
0.175 - 0.225,
0.225 - 0.275,
0.275 - 0.325,
0.325 - 0.375,
0.375 - 0.425,
0.425 - 0.475,
0.475 - 0.55,
0.55 - 0.65,
0.65 - 0.75,
0.75 - 0.85,
0.85 - 0.95,
0.95 - 1.125,
1.125 - 1.375,
1.375 - 1.625,
1.625 - 1.875,
1.875 - 2.125,
2.125 - 2.375,
2.375 - 2.625,
2.625 - 2.875,
2.875 - 3.125,
3.125 - 3.375,
3.375 - 3.625,
3.625 - 3.875,
3.875 - 4.25,
4.25 - 4.75,
4.75 - 5.25,
5.25 - 5.75,
5.75 - 6.25,
6.25 - 6.75,
6.75 - 7.25,
7.25 - 7.75,
7.75 - 8.25,
8.25 - 8.75,
8.75 - 9.25,
9.25 - 9.75,
9.75 - 10.25,
10.25 - 10.75,
10.75 - 11.25,
11.25 - 11.75,
11.75 - 12.25,
12.25 - 12.75,
12.75 - 13.25,
13.25 - 13.75, >13.75.
我知道如何阅读数据的含义,但由于我在编码和编码中使用hdf5文件是一个业余爱好者, 我无法弄清楚具体的命令,以获得h5py和numpy沿我想要的维度相加,显示向量等。
有没有经验的人知道如何做到这一点?
谢谢,
Winonah
答案 0 :(得分:0)
如何打开数据集
import numpy as np
import h5py
f=h5py.File("yourFilName") #Open the file
f.keys() #Get the names of the datasets
# there is one dataset called 'FormedStellarMass'
dset=f['FormedStellarMass'] #Open this dataset
shape_of_Array=dset.shape #Gives you the shape of the array
# (56, 4366546)
这明显不同于您的期望。这里需要进一步解释。最后一个维度也不是可被16整除的整数。我对数据进行了一些调查。
dset[55,n:n+16] #n=0,16,32.... gives zeros
如果减少第一维中的索引,则数据看起来会增加
dset[55,0:16]
dset[54,0:16]
dset[53,0:16]
在数据集的末尾,似乎只有零。
dset[:,dset.shape[1]-17:dset.shape[1]-1]
请更正您的问题并说明您的数据是如何组织的。数据集中是否存在不完整的数据块?
答案 1 :(得分:0)
代码以完全相同的形式发送给我,说明它是每个星系的16X56阵列。如果它看起来不那么那么那么格式化必定会发生一些事情。 链接:https://drive.google.com/file/d/0B1Kj475OJBnuTGpGby1iRTd4Yzg/view?usp=sharing指向文字文件的链接:https://drive.google.com/file/d/0B1Kj475OJBnuaWgzYVRHUnhQdkU/view?usp=sharing
f.keys() #Get the names of the datasets
# there is one dataset called 'FormedStellarMass'
dset=f['FormedStellarMass'] #Open this dataset
shape_of_Array=dset.shape #Gives you the shape of the array
(56, 4366546)
dset[1,0:56]
array([ 5.90118565e-04, 0.00000000e+00, 2.02415307e-03,
1.97571842e-03, 9.65413419e-05, 0.00000000e+00,
3.54059404e-04, 0.00000000e+00, 0.00000000e+00,
4.17659608e-03, 0.00000000e+00, 0.00000000e+00,
1.16594089e-03, 0.00000000e+00, 0.00000000e+00,
5.53713227e-03, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 4.25061543e-03, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 2.06665633e-03,
2.65859143e-03, 1.31853058e-03, 6.08496601e-04,
0.00000000e+00, 1.06139400e-03, 4.08286955e-03,
3.30939831e-03, 2.52765852e-03, 2.83553329e-03,
3.42842575e-03, 0.00000000e+00, 1.43292415e-03,
1.41140283e-03, 1.46918988e-03, 0.00000000e+00,
4.53191859e-03, 1.17285761e-03, 4.20416283e-04,
0.00000000e+00, 2.76596771e-03, 2.18793727e-03,
0.00000000e+00, 2.99561035e-03, 9.63958330e-04,
1.64320586e-03, 1.38792950e-03, 2.01430215e-04,
0.00000000e+00, 1.59171385e-03])