簡體   English   中英

C++ 陣列到 HDF5

[英]C++ Array to HDF5

我需要將來自兩個 float32 arrays 的數據存儲在 an.h5 文件中。 arrays 的大小均為 76800 (240x320),每個都代表一個圖像。 我很樂意將兩個 arrays 存儲在 an.h5 文件中,但由於我是 c++ 的初學者,我不知道該怎么做。

我看了這里,但對於我的情況,似乎不需要轉換為多數組。 盡管這看起來是一個非常簡單的問題,但我找不到一個簡單的代碼示例。

到目前為止,這是我的代碼:

H5::H5File file("/home/m/Desktop/tryout/file.h5", H5F_ACC_TRUNC);

// Vector X
hsize_t dims_pol[1] = {f->flow_x.size()};
H5::DataSpace dataspace_x(1, dims_pol);
H5::IntType datatype_x(H5::PredType::NATIVE_FLOAT);
H5::DataSet dataset_x(file.createDataSet("p", datatype_x, dataspace_x));
dataset_x.write(f->flow_x.data(), H5::PredType::NATIVE_UINT8);
dataset_x.close();

但是,這只會將一個向量寫入文件,另外,我無法在 python (使用熊貓)中打開文件。 但它適用於 h5dump。

謝謝你的幫助

解決問題的一種方法是在 C++ 中使用HDFql ,如下所示:

// declare variables 'arr1' and 'arr2'
float arr1[240][320];
float arr2[240][320];

// populate variable 'arr1' with values

// populate variable 'arr2' with values

// register variable 'arr1' for subsequent usage (by HDFql)
HDFql::variableTransientRegister(&arr1);

// create dataset 'dset1' of data type float (size 240x320) populated with values from 'arr1'
HDFql::execute("create dataset dset1 as float(240, 320) values from memory 0");

// register variable 'arr2' for subsequent usage (by HDFql)
HDFql::variableTransientRegister(&arr2);

// create dataset 'dset2' of data type float (size 240x320) populated with values from 'arr2'
HDFql::execute("create dataset dset2 as float(240, 320) values from memory 0");

更多信息可以在 HDFql參考手冊中找到。

我想我找到了解決方案,雖然我對它不太滿意,因為 pandas (python) 無法打開它,我必須使用 h5py。

但是,這是我的代碼。 如果您看到任何改進,請告訴我。

#include "H5Cpp.h"

H5::H5File file("/home/m/Desktop/tryout/file.h5", H5F_ACC_TRUNC);

// Vector X
hsize_t dims_pol[1] = {f->flow_x.size()};
H5::DataSpace dataspace_x(1, dims_pol);
H5::IntType datatype_x(H5::PredType::NATIVE_FLOAT);
H5::DataSet dataset_x(file.createDataSet("x", datatype_x, dataspace_x));
dataset_x.write(f->flow_x.data(), H5::PredType::NATIVE_FLOAT);
dataset_x.close();

// Vector Y
H5::DataSpace dataspace_y(1, dims_pol);
H5::IntType datatype_y(H5::PredType::NATIVE_FLOAT);
H5::DataSet dataset_y(file.createDataSet("y", datatype_y, dataspace_y));
dataset_y.write(f->flow_y.data(), H5::PredType::NATIVE_FLOAT);
dataset_y.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM