J'essaye d'écrire un jeu de données 3D dans un fichier HDF5. L'écriture réussit et les dimensions sont toutes correctes dans le fichier, cependant, lorsque vous utilisez l'outil HDFView, les données sont faussées, mais ont une structure reconnaissable, donc je dois être proche. Je n'arrive pas à comprendre ce qui me manque et je ne trouve pas un bon exemple pour écrire des données 3D.Ecriture d'un tableau 3D en HDF5
Les données sont une partie de mémoire contiguë indexée en tant que telle: data[layer][row][col]
ou data[layer*rows*cols + row*cols + col]
Voici le code que je utilise, où HDF5_CHECK est une macro qui jette une exception en cas d'erreur.
const hsize_t dim[] = { rows, cols, layers };
hid_t space = H5Screate_simple(3, dim, NULL);
hid_t dataset = H5Dcreate(file, "dataset", type, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
HDF5_CHECK(dataset);
HDF5_CHECK(H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, data));
HDF5_CHECK(H5Sclose(space));
HDF5_CHECK(H5Dclose(dataset));
EDIT
Je crois que le problème est lié à l'indexation. Le tableau en C++ est correct. Cependant, je crois que je veux stocker les données Z, Y, X comme Y, X, Z dans le conteneur HDF5. Cela doit être possible en utilisant hyperslabs, mais je ne suis pas sûr comment
EDIT 2
Puisque les données a la structure, je peux voir les données d'une image dans HDFView. Les éléments suivants devraient aider à montrer la question:
EDIT 3
Contacté le groupe HDF et a trouvé décalage dimensions est pas possible dans la mise en œuvre actuelle. Cela doit être fait avant d'écrire l'ensemble de données.
Comment est 'data' déclarée? Quel est le type primitif prévu pour chaque élément? –
Le type est réellement modélisé.'data' est déclaré comme un vecteur, cependant, dans le contexte de cette méthode un' const T * ' – steveo225
Comme les données sont modélisées, comment définissez-vous' type'? Pouvons-nous également voir un échantillon des données et sa forme "brouillée"? –