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中?
基础教程推荐
猜你喜欢
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 如何将RPC与Volttron配合使用 2022-09-21
- 从顶点坐标创建三角网格 2022-09-21
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- 获取多索引中某个级别的最后一个元素 2022-09-22