Вопрос

I'm using Silo with HDF5, and I'm having trouble accessing some of the metadata with h5py. It spits out some rather unusual HDF5 structuring, where it puts a DATATYPE inside a DATATYPE. Here's an excerpt of the output from h5dump:

DATATYPE "sigma_t" H5T_STD_I32LE;
   ATTRIBUTE "silo" {
      DATATYPE  H5T_COMPOUND {
         H5T_STRING {
            STRSIZE 5;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         } "meshid";
         H5T_STRING {
            STRSIZE 15;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         } "value0";
         H5T_STD_I32LE "ndims";
         H5T_STD_I32LE "nvals";
         H5T_STD_I32LE "nels";
         H5T_IEEE_F32LE "time";
         H5T_STD_I32LE "use_specmf";
         H5T_STD_I32LE "centering";
         H5T_ARRAY { [3] H5T_STD_I32LE } "dims";
         H5T_ARRAY { [3] H5T_STD_I32LE } "zones";
         H5T_ARRAY { [3] H5T_STD_I32LE } "min_index";
         H5T_ARRAY { [3] H5T_STD_I32LE } "max_index";
         H5T_ARRAY { [3] H5T_IEEE_F32LE } "align";
      }
      DATASPACE  SCALAR
      DATA {
      (0): {
            "mesh",
            "/.silo/#000004",
            2,
            1,
            100,
            0,
            -1000,
            111,
            [ 10, 10, 0 ],
            [ 9, 9, 0 ],
            [ 0, 0, 0 ],
            [ 9, 9, 0 ],
            [ 0.5, 0.5, 0 ]
         }
      }
   }
   ATTRIBUTE "silo_type" {
      DATATYPE  H5T_STD_I32LE
      DATASPACE  SCALAR
      DATA {
      (0): 501
      }
   }

Basically, f['sigma_t'].attrs['silo'] returns a tuple with all of the correctly formatted data but without any of the associated labels for the data types. (I need to know the names meshid, value0, etc.) Is there a way to get this? I'm at a loss.

Example file and script

HDF5 file contains the "sigma_t" field, and the actual data is stored in /.silo/#000004.

Script:

import h5py
f = h5py.File('xsn.silo', 'r')
print f['sigma_t'].attrs['silo']

Result:

('mesh', '/.silo/#000004', 2, 1, 100, 0.0, -1000, 111, array([10, 10,  0], dtype=int32), array([9, 9, 0], dtype=int32), array([0, 0, 0], dtype=int32), array([9, 9, 0], dtype=int32), array([ 0.5,  0.5,  0. ], dtype=float32))

What I also want is something like:

('meshid','value0','ndims', ..., 'align')

Is this possible?

Нет правильного решения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top