Как прочитать набор данных hdf5 с неизвестным типом данных в c? - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь открыть набор данных hdf5 в c, не зная тип набора данных. Я могу получить тип набора данных, используя «H5Dget_type (dataset_id)», однако, когда я хочу выделить память для массива данных, то есть «datatype (int, float и т. Д.) Dset [n]», я не могу сделать это, не зная тип данных (int, float и т. д.).

Итак, мой вопрос в том, как мне получить тип данных, чтобы использовать его для выделения памяти для массива, который я собираюсь использовать?

Спасибо!

1 Ответ

0 голосов
/ 28 марта 2019

Если вы не привязаны к определенному инструменту, проверьте HDFql , поскольку это избавит вас от низкоуровневых деталей при работе с файлами HDF5.Ваша проблема может быть решена с помощью HDFql в C следующим образом (предположим, вы хотите прочитать набор данных my_dataset):

// declare variables
void *data;
long long size;

// get size (in bytes) of dataset "my_dataset" and populate HDFql default cursor with it
hdfql_execute("SHOW SIZE my_dataset");

// move HDFql default cursor to first position
hdfql_cursor_first(NULL);

// retrieve size (in bytes) from HDFql default cursor
size = hdfql_cursor_get_bigint(NULL);

// allocate memory based on the size (in bytes) of dataset "my_dataset"
data = malloc(size);

// register variable "data" for subsequent usage
hdfql_variable_register(&data);

// select (i.e. read) data from dataset "my_dataset" and populate variable "data" with it
hdfql_execute("SELECT FROM my_dataset INTO MEMORY 0");

// from this point on, variable "data" contains the data from "my_dataset"
...