使用h5py将illustris hdf5文件导入numpy数组

时间:2017-07-26 15:46:30

标签: python numpy hdf5 h5py

我正在使用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

2 个答案:

答案 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])