HDF5 prend en charge l’accès aux sélections d’un ensemble de données en une seule opération de lecture / écriture. Actuellement les sélections sont limitées à des hyperslabs, des unions d’hyperslabs et à des listes de points indépendants
a)Dans l’exemple a), un seul hyperslab est lu à partir du milieu d’un tableau à deux dimensions dans un fichier et est stocké dans le coin d’une matrice à deux dimensions (plus petite), en mémoire
b)Dans l’exemple b), une série régulière de blocs est lue à partir d’un tableau à deux dimensions dans un fichier et est stockée (à un offset donné) comme une séquence contiguë de valeurs dans un tableau unidimensionnel, en mémoire
c)Dans l’exemple c), une séquence de points sans motif régulier est lue à partir d’un tableau à deux dimensions dans un fichier et est stockée comme une séquence de points sans motif régulier dans un tableau à trois dimensions, en mémoire
d)Dans l’exemple d), une union d’hyperslabs est lue dans le dataspace ”fichier” et les données sont stockées suivant une autre union d’hyperslabs dans le dataspace ”mémoire”
Les hyperslabs sont des parties de jeux de données. Un hyperslab peut être un ensemble logiquement contigu de points (ou un motif régulier de points, ou de blocs) dans un espace de données. L’image suivante illustre une sélection de blocs 3x2 espacés régulièrement dans un espace de données 8x12 :
Quatre paramètres sont nécessaires pour décrire un hyperslab :
Supposons que nous voulons lire un hyperslab de dimension 3x4 à partir d’un dataset en commençant par l’élément <1,2>. Le code suivant illustre la sélection de l’hyperslab dans le dataspace ”fichier” :
Nous devons définir ensuite l’espace de données dans la mémoire de manière analogue. Supposons, par exemple, que nous avons en mémoire un tableau de dimension 7x7x3 dans lequel nous souhaitons lire l’hyperslab de dimension 3x4 décrit ci-avant en commençant à l’élément <3,0,0>. Comme le dataspace ”mémoire” comporte trois dimensions, il faut décrire l’hyperslab en mémoire comme un tableau à trois dimensions, avec la dernière dimension à 1 : 3x4x1
→ Nous devons donc décrire deux choses : les dimensions du tableau en mémoire, et la taille et la position de l’hyperslab que nous souhaitons lire. Le code ci-après illustre comment procéder :
Considérons le dataspace de dimension 8x12 décrit ci-avant, dans laquelle nous avons sélectionné huit blocs 3x2. Supposons que nous souhaitons combler ces huit blocs :
Rappel, cet hyperslab a les paramètres suivants: start = (0,1), stride = (4,3), count = (2,4), block = (3,2)
Supposons que l’espace de données source en mémoire soit ce tableau de 50 éléments appelé ”vector” :
Le code suivant va écrire les 48 éléments de ”vector” vers notre fichier, en commençant par le deuxième élément du vecteur :
Après ces opérations, le dataspace ”fichier” aura donc les valeurs suivantes :
Un hyperslab spécifie un motif régulier d’éléments dans un ensemble de données. Mais il est également possible de spécifier une liste d’éléments indépendants
Supposons, par exemple, que nous souhaitons écrire dans le dataspace de dimension 8x12 décrit ci-avant les valeurs 53, 59, 61, 67 pour les éléments suivants : (0,0), (3,3), (3,5) et (5,6). Le code suivant sélectionne les points et les écrit dans le dataspace ”fichier” :
Après ces opérations, le dataspace ”fichier” aura donc les valeurs suivantes :
01/07/13 - M. TOLA - Liris - /
#