Hierarchical Data Format

miniatura|dereita|250px|Logotipo do grupo de HDF
**Hierarchical Data Format** (**HDF**, **HDF4**, ou **HDF5**) é o nome para dun conxunto de formatos de ficheiros e librarías creadas para a organización e almacenamento de grandes cantidades de datos numéricos, algo que se precisa na investigación sobre a aprendizaxe automática. Trátase dun formato en licenza aberta (como as BSD) coas súas especificacións públicas, capaz de obter información sobre os datos que almacena sen recorrer a fontes externas e con capacidade de estandarización sobre os datos de natureza aberta que admite para gardar en memoria.

HDF ten implementacións en varias linguaxes ou plataformas de software comerciais e non-comerciais, como IDL, Java, MATLAB, Octave, Python, R ou Scilab. As dúas principais versións do HDF son HDF4 e HDF5, bastante diferentes en estrutura e API. HDF está composto basicamente pola libraría, unha consola como liña de comando, unha ferramenta de probas, unha interface Java e polo visor HDF Viewer.

## Historia
Na procura dun formato flexíbel e independente da plataforma de uso, con capacidade de almacenamento da crecente e heteroxénea variedade de datos na investigación comezou a desenvolverse o formato HDF nos laboratorios da NCSA (National Center for Supercomputing Applications) a partir do ano 1988, manténdose na actualidade polo equipo de desenvolvemento de HDF, que depende da Universidade de Illinois.

Actualmente, este formato utilízase por múltiples organismos, tanto públicos como privados, para a difusión de datos e resultados científicos, entre as que se atopa a NASA, ou a Axencia Europea do Espazo (ESA), en, por exemplo, as lecturas dos sensores MODIS, MERIS ou ETM+, entre outros.

## Estrutura
A estrutura dos arquivos HDF permite o almacenamento de diversos tipos de datos, tales como:

* *Scientific Data Sets* (SD), utilizados para almacenar matrices n- dimensionais de datos enteiros (8, 16 e 32 bits, con ou sen signo) ou reais (32 ou 64 bits) no seu formato estándar, ou por medio das APIs, e para crear datos noutros rangos de valores (1 a 32 bits), xunto cos seus metadatos (dimensións da matriz, atributos, etc...)
* *Raster Images* (RI), que permiten almacenar imaxes de 8 bits (0-255 niveis de gris) ou 24 bits (RGB), ou ben empregar as librarías de programación para gardar imaxes noutros formatos (16 a 32 bits enteiros, 32 a 64 bits coma flotante). Ademais, permítese almacenar información sobre as dimensións da imaxe, así como a paleta de cor asociada a ela. Tamén é posíbel empregar compresión (RLE, JPEG, GZIP e adaptativa Huffman) para reducir o tamaño dos arquivos resultantes.
* *Text Annotations* (TA), para almacenar calquera tipo de información textual: Etiquetas, descricións ou información de ficheiro.
* *VDatas* (VD), para almacenar datos vectoriais sen topoloxía.
* *Vgroups* (VG), que nos permiten asociar datos relacionados dentro dun arquivo.

## Acceso aos datos
Existen diversas formas de acceder aos datos contidos baixo un ficheiro HDF. Unha delas é o acceso a nivel binario, coñecendo a estrutura do ficheiro público, ou ben a través de aplicacións dispoñíbeis que soporten este formato.

O formato de organización dos datos no HDF5 pódese entender como un sistema de ficheiros descrito nun único arquivo HDF5. Similar aos cartafoles ou contedores virtuais nun ordenador persoal pero sendo considerados na linguaxe HDF5 como "*datasets*" (conxuntos de datos). Isto resulta nunha xerarquía organizativa, de feito os valores dun arquivo HDF5 poden ser lidos usando sintaxe POSIX /ruta/ao/valor.

## Ligazóns externas 
*HDF Group
*What is HDF5?
*A presentation on how to handle large datasets in Quantum Chemistry using hdf5
*NASA HDF file example, its structure generated and shown online as CreativeCommons image

## Notas