How to store my own class object into hdf5?(如何将我自己的类对象存储到hdf5中?)
本文介绍了如何将我自己的类对象存储到hdf5中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个类来保存我研究的实验结果(我是一名EE博士生),就像
class Trial:
def __init__(self, subID, triID):
self.filePath = '' # file path of the folder
self.subID = -1 # int
self.triID = -1 # int
self.data_A = -1 # numpy array
self.data_B = -1 # numpy array
......
它是许多bool、int和umpy数组的混合体。你明白我的意思。我读到,如果数据是hdf5格式的,加载速度会更快。我是否可以使用我的数据执行此操作?Trial
数据是我的Trial
对象的python列表?
推荐答案
这是我用来保存数据的一个小类,如下所示。您可以通过执行类似..
的操作来使用它dc = DataContainer()
dc.trials = <your list of trial objects here>
dc.save('mydata.pkl')
然后加载DO..
dc = DataContainer.load('mydata.pkl')
下面是DataContainer文件:
import gzip
import cPickle as pickle
# Simple container with load and save methods. Declare the container
# then add data to it. Save will save any data added to the container.
# The class automatically gzips the file if it ends in .gz
#
# Notes on size and speed (using UbuntuDialog data)
# pkl pkl.gz
# Save 11.4s 83.7s
# Load 4.8s 45.0s
# Size 596M 205M
#
class DataContainer(object):
@staticmethod
def isGZIP(filename):
if filename.split('.')[-1] == 'gz':
return True
return False
# Using HIGHEST_PROTOCOL is almost 2X faster and creates a file that
# is ~10% smaller. Load times go down by a factor of about 3X.
def save(self, filename='DataContainer.pkl'):
if self.isGZIP(filename):
f = gzip.open(filename, 'wb')
else:
f = open(filename, 'wb')
pickle.dump(self, f, protocol=pickle.HIGHEST_PROTOCOL)
f.close()
# Note that loading to a string with pickle.loads is about 10% faster
# but probaly comsumes a lot more memory so we'll skip that for now.
@classmethod
def load(cls, filename='DataContainer.pkl'):
if cls.isGZIP(filename):
f = gzip.open(filename, 'rb')
else:
f = open(filename, 'rb')
n = pickle.load(f)
f.close()
return n
根据您的用例,您可以将其用作基类,如顶部所述,或者只需将ickle.ump行复制到您的代码中。
如果您确实有很多数据,并且不是在测试程序的每次运行中都使用所有这些数据,那么还有一些其他选项,如数据库,但以上是假定您每次运行都需要大部分数据的最佳简单选项。
这篇关于如何将我自己的类对象存储到hdf5中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何将我自己的类对象存储到hdf5中?
猜你喜欢
- H5py:如何在HDF5组和数据集上使用key()循环 2022-09-21
- 基于多个一级列的子集多索引DataFrame 2022-09-22
- 为什么切换屏幕在Kivy中不起作用? 2022-09-21
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 合并具有多个索引和列值的数据帧 2022-09-22
- 如何将属性添加到作为组存储在HDF5文件中的 pa 2022-09-21
- 将文件从Azure文件加载到Azure数据库 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 使用带有CROSS_VAL_SCORE的自定义估计器失败 2022-09-21
- 如何命名HDF5数据集中的列? 2022-09-21