问题标签 [h5py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 调整numpy或数据集大小的有效方法?
我想了解resize()
function 对numpy
array 与 an 的影响h5py dataset
。在我的应用程序中,我正在逐行读取文本文件,然后在解析数据后写入hdf5
文件。什么是实现这一点的好方法。我应该将每个新行添加到一个numpy
数组中并继续调整numpy 数组的大小(增加轴)(最终将完整的 numpy 数组写入 h5py 数据集),还是应该直接将每个新行数据添加到内存中h5py dataset
,从而调整h5py dataset
内存的大小。resize()
如果我们在每一行之后继续调整大小,函数如何影响性能?或者我应该在每 100 行或 1000 行之后调整大小?
每个数据集中可能有大约 200,000 行。
任何帮助表示赞赏。
python - 在 h5py 中混合高级和低级接口
我想知道是否有一种方法可以使用 h5py 将高级 API 与低级 API 混合。
示例:我有一个通过高级接口访问的 hdf5 文件。
现在,该ds
对象是一个h5py.Dataset,它非常适合我需要做的大部分事情。但是,我想弄清楚这个数据集存储在磁盘上的大小。低级接口提供h5py.h5d.DatasetID.get_storage_space()这正是我想要的,但我不知道如何从我的高级对象调用它。
有没有办法从高级 API 中找到底层的低级对象?
python - 大型 numpy (HDF5) 数组的统计信息
我有相当大的 4D 数组 [20x20x40x15000],我使用h5py作为 HDF5 文件保存到磁盘。现在的问题是我想计算整个数组的平均值,即使用:
我得到一个MemoryError
. 似乎 numpy 试图将 HDF5 文件加载到内存中以执行平均?
有没有人对这个问题有一个优雅而有效的解决方案?
python - Python垃圾收集器有问题吗?
我有一个简单的程序,它读取一个包含几百万行的大文件,解析每一行(numpy array
)并转换成一个双精度数组(python array
),然后写入一个hdf5 file
. 我重复这个循环好几天。读取每个文件后,我删除所有对象并调用垃圾收集器。当我运行程序时,第一天解析没有任何错误,但第二天我得到了MemoryError
. 我监控了我的程序的内存使用情况,在解析的第一天,内存使用量约为1.5 GB。第一天解析完成后,内存使用量下降到50 MB。现在当第二天开始时,我尝试从我得到的文件中读取行MemoryError
。以下是程序的输出。
我非常确定 Windows 系统任务管理器显示此进程的内存使用量为50 MB。看起来 Python 的垃圾收集器或内存管理器没有正确计算可用内存。应该有很多可用内存,但它认为没有足够的内存。
任何的想法?
编辑
在这里添加我的代码
我将放置我的部分代码。我是 python 新手,请原谅我的 python 编码风格。
模块 1
模块 2 - taqdb - 将解析后的数据存储在数组中
模块 3- 解析器
谢谢。
python - 读取多个 hdf5 文件并将它们附加到新字典
我有一个hdf5
文件列表,我想打开这些文件并将适当的值读入新字典并最终写入文本文件。我不一定知道这些值,所以用户将它们定义在一个数组中作为代码的输入。所需文件的数量由用户想要查看的数据的天数定义。
如果我只有一个文件,这很好用,但如果我有两个或更多文件,它似乎关闭了密钥?我不确定这是否正是发生的事情,但是当我问是什么时new_data_dic
,它给出的值{'Bfs_geo_a': <Closed HDF5 dataset>,...
不会写入文本文件。我尝试在打开下一个(rbsp_ephm.close()
)之前关闭 hdf5 文件,但我得到了同样的错误。
感谢您的任何帮助!
python - 使用指针的 h5py 对称数组
我一直在寻找一种方法来创建最终对称的自定义 h5py 数组。理想情况下,它将是一个数组,这样当它被创建时有一个单一的值a[i][j]
并a[j][i]
指向。这样做的原因是我会将一个大距离向量写入一个方形矩阵。向量和方阵太大而无法保存在内存中,所以我想要一个相对快速的解决方案来创建方阵。
python - python递归函数并返回非可变字典
我试图让函数 VisitAllObjects 接受不同的文件并返回一个字典。但是我目前有什么指向同名?因此,一旦 gdata 运行,fdata 就会更改为 gdata。我怎样才能使它 fdata 和 gdata 等于他们的 gh5 文件中的尊重数据?
在您的帮助下并在调用 visit_all_objects 时添加 file_info ,我能够让它工作。如果您发现这有任何问题,请告诉我,我仍然需要进一步检查,但使用 fdata 和 gdata 会返回不同的数据并且fdata is gdata
是 False。谢谢。
我得到它与以下工作:
python - 使用 h5py 高级接口时如何设置缓存设置?
我正在尝试增加 HDF5 文件的缓存大小,但它似乎不起作用。这就是我所拥有的:
这是输出:
知道为什么阅读有效,但设置无效吗?
关闭和重新打开文件似乎也无济于事。
python - 使用 h5py 访问数据范围
我有一个包含 62 个不同属性的 h5 文件。我想访问他们每个人的数据范围。
在这里解释更多我在做什么
前面的代码给了我一个属性列表“U”,“T”,“H”,......等
假设我想知道“U”的最小值和最大值是多少。我怎样才能做到这一点 ?
这是运行“h5dump -H”的输出
python - h5py 内存中文件和多处理错误
这是给你的 HDF5和多处理专家...首先,我知道 python h5py 和多处理模块不一定彼此喜欢,但是我遇到了一个我无法弄清楚的错误。我正在处理的脚本创建一个临时的内存中hdf5 文件,将来自(pickle)输入文件的数据存储在内存文件中,然后一个多处理池对来自 temp 的数据执行(只读)操作HDF5 文件。
我已经能够隔离导致错误的代码,所以这里有一个简化的代码片段。当我在生成器函数中创建内存中的hdf5 文件,然后使用该生成器为多处理池生成参数时,我得到了一系列 HDF5 错误。这里有一些代码很简单,我可以让它重新创建错误:
当我使用 itertools.imap(设置“useMP=False”)时,我得到以下输出,如预期的那样:
但是当我使用 Pool.imap 时,即使池仅使用单个工作线程创建,我也会得到以下输出:
奇怪的是,这个错误不会使程序崩溃。我正在编写的导致此错误的脚本实际上按我的预期工作 - 但它为它创建的每个内存文件提供了上述错误。使用 itertools.imap 时没有错误,读取现有 HDF5 文件时没有错误,只有多处理和内存中 HDF5 文件的组合。
h5py 版本 2.1.1
hdf5 版本 1.8.9
Python 版本 2.7.3