我正在将HDF5DotNet与C#一起使用,并且只能读取完整数据作为数据集中的附加图像。 hdf5文件太大,将近1.4GB,如果我将整个阵列加载到内存中,那么它将耗尽内存。
我想从一列中读取所有数据
double[] values = new double[203572];
string m_Doc_01 = "data/sample/line";
HDFql.Execute("USE DIRECTORY " + "\"" + File_Directory + "\"");
HDFql.Execute("USE FILE " + "\"" + File_Name + "\"");
HDFql.Execute("CREATE CHUNKED(1, 203572) DATASET my_dataset_BS AS DOUBLE(2050, 203572)");
如何“ m_Doc_01 ==> my_dataset_BS”数据 ??? ???
for (int i = 0; i < 2050; i++)
{
HDFql.Execute("SELECT FROM " + "\"" + m_Doc_01 + "\"" + "(1:::1) INTO MEMORY " + HDFql.VariableRegister(values));
}
答案 0 :(得分:1)
要阅读屏幕截图中突出显示的列(即列#0),必须将超级平板更改为(请注意0):
HDFql.Execute("SELECT FROM " + "\"" + m_Doc_01 + "\"" + "(, 0:::1) INTO MEMORY " + HDFql.VariableRegister(values));
也就是说,如果您要遍历数据集并同时读取一列,请执行以下操作(也最好在循环开始之前注册变量values
,并在循环完成之后取消注册-这将提高性能):
number = HDFql.VariableRegister(values);
for(int i = 0; i < 2050; i++)
{
HDFql.Execute("SELECT FROM " + "\"" + m_Doc_01 + "\"" + "(, " + i + ":::1) INTO MEMORY " + number);
// do something with variable "values" (which contains the values of column #i)
}
HDFql.VariableUnregister(values);