Especificación de la forma del conjunto de datos al crear un archivo HDF5
Tengo una función con la siguiente firma:
fn create_something(...) -> ndarray::ArrayBase<><f64>, ndarray::Dim<[usize; 2]>> {
// Hace cosas
}
Luego llamo a esta función y me gustaría guardar los datos en un archivo HDF5:
let data = create_something(...);
let file = hdf5::File::create("./output/example.h5"); // abrir para escritura
let group = file.create_group("example_group"); // crear un grupo
let data_set = group.new_dataset::<f64>().create("example");
let write_res = data_set.write(data.view());
match write_res {
Ok(_) => (),
Err(error) => panic!("Error: {:?}", error)
}
Resultado:
thread 'main' panicked at 'Error: shape mismatch when writing: memory = [1950, 24191], destination = []', src/main.rs:203:27
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Entonces parece haber un problema con la forma, lo cual es razonable ya que no he especificado realmente la forma del conjunto de datos… Lo que no entiendo es cómo puedo especificar esto (encuentro la documentación aquí muy confusa…) y cómo se podría añadir datos al conjunto de datos si necesitamos conocer su forma exacta al crearlo…
davy.ai
Para especificar la forma del conjunto de datos, debemos pasar las dimensiones esperadas como argumento al crear el conjunto de datos. En este caso, como tenemos una matriz 2D, necesitamos especificar el número de filas y columnas.
Por ejemplo:
Donde
data.shape()
devuelve las dimensiones del arreglo de datos.Para agregar datos a un conjunto de datos existente, el conjunto de datos debe ser extensible. Podemos crear un conjunto de datos extensible pasando un objeto
hdf5::dataspace::Properties
durante la creación y configurando el argumentomax_dimensions
aSome(dimensions)
.Por ejemplo:
Luego, podemos agregar datos usando el método
append
:Tenga en cuenta que el método
append
espera datos con el mismo número de dimensiones que el conjunto de datos, y los nuevos datos deben ajustarse a lasmax_dimensions
especificadas en la creación.