【问题标题】:How to hdf5 (Hdfsl ) file (One Column Read) read (Big Size file)如何读取 hdf5 (Hdfsl) 文件(一列读取)读取(大尺寸文件)
【发布时间】:2019-12-30 07:10:07
【问题描述】:

我正在使用带有 C# 的 HDF5DotNet,我只能读取完整数据作为数据集中的附加图像。 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));
    }

【问题讨论】:

  • 请编辑您的问题以便阅读。

标签: hdf5 hdfql


【解决方案1】:

要阅读您在屏幕截图中突出显示的列(即第 0 列),您必须将 hyperslab 更改为(请注意 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);

【讨论】:

  • SELECT FROM "data/sample/line"(0:::1) INTO MEMORY 0 错误消息 (-99) HDFQL_ERROR_UNKNOWN 表示由于未知/意外错误而失败的操作 但是,容量低文件没有错误。
  • 能否打开调试机制(通过在 HDFql 中执行操作 SET DEBUG ENABLE)并在执行给您 HDFQL_ERROR_UNKNOWN 的操作时在此处发布输出?
  • 脚本信息
  • "在我的示例文件中"错误计数行 // 没有错误计数行
猜你喜欢
  • 2018-06-26
  • 2015-04-18
  • 2015-10-20
  • 2013-12-12
  • 1970-01-01
  • 2015-03-26
  • 2017-11-26
  • 2013-01-23
  • 2015-03-19
相关资源
最近更新 更多