hdf5 - 如何读取 hdf5 (Hdfsl) 文件(一列读取)读取(大尺寸文件)
问题描述
我正在使用带有 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));
}
解决方案
要阅读您在屏幕截图中突出显示的列(即第 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);
推荐阅读
- java - 为什么 Android System.currentTimeMillis() 不是准确的时间戳?
- python - 在 groupby 之后查找单独列的最小/最大值
- r - 使用 dplyr 将列名和条件作为字符串进行过滤
- url-rewriting - 如何在服务器端实现浏览器 url 和查询字符串转义?
- r - 我没有正确初始化我的列表吗?试图追加到一个空列表只返回最后一个值 - R
- python - 如何根据列的数据对时间序列进行重新采样/重新索引/分组?
- javascript - 拆分 Ogg Opus 文件流
- ios - Web 应用程序自动重定向到 iOS 问题的初始页面(不应重定向)
- r - 使用 R 从 SPSS 文件创建多个响应集问题
- shell - 堆栈安装 codecov-haskell 失败并出现错误