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
 
