【发布时间】:2016-09-09 23:19:17
【问题描述】:
我正在为马尔可夫链蒙特卡洛反演程序实现数据收集。但是,MCMC 运行可能需要一周或更长时间才能完成!在运行开始时打开文件会更好:
with h5py.File('my_data.hdf5', 'r+', libver='latest') as fp:
fp.swmr_mode = True
mcmc_run(fp)
或者每次我想添加一个数据集(在mcmc_run()内)
with h5py.File('my_data.hdf5', 'r+', libver='latest') as fp:
fp.swmr_mode = True
fp['dataset'] = new_data
每次接受我必须在 9 个数据集上保存大约 7 MB(在大约一周的计算时间内总共有 500 个,约 5000 次迭代)。不幸的是,数据来自迭代中的几个不同对象,因此我无法将它们分组并在每次接受时打开文件一次。
【问题讨论】:
-
我不知道h5py,但数据通常在关闭时被刷新(如提交),所以关闭会更安全。但是,您可能有一个可用的
flush操作,这样会产生相同的效果。关闭的问题是你丢失了文件位置,但你应该为停电等导致的重启做好准备。 -
@cdarke hdf5 的好处是没有丢失文件位置的问题。访问数据集有点像字典中的 numpy 数组。有一个冲洗操作。目前我在每次数据集更改后刷新。
-
对于需要这么长时间的跑步,您可能需要考虑如果停电会发生什么(作为一名 MC 老兵,这是我最大的恐惧)。似乎关闭和重新打开文件可能更安全,并且在断电、计算机崩溃等期间不太可能使文件容易损坏。
-
@gariepy 说得好。我会做安全的事情并打开/关闭文件。
标签: python hdf5 scientific-computing h5py