Python 创建简单数据库以存储和加载随机数目的高维numpy数组的好方法是什么?

Python 创建简单数据库以存储和加载随机数目的高维numpy数组的好方法是什么?,python,numpy,pickle,Python,Numpy,Pickle,一个计算过程会创建一个随机数目的numpy数组,我想将每个数组方便地保存并加载到硬盘上。重要的是,文件是高维的,数组的形状本身也是随机的 为了保存和加载每个数组,我创建了以下接口: class Filesaver: def __init__(self, filename: str): self._filename = filename try: f = open(self._filename, 'rb')

一个计算过程会创建一个随机数目的numpy数组,我想将每个数组方便地保存并加载到硬盘上。重要的是,文件是高维的,数组的形状本身也是随机的

为了保存和加载每个数组,我创建了以下接口:

class Filesaver:

    def __init__(self, filename: str):
        self._filename = filename
        try:
            f = open(self._filename, 'rb')
            self._pos = self._get_len(f)
        except FileNotFoundError:
            self._pos = 0

    def _get_len(self, file) -> int:
        pos = 0
        while True:
            try:
                pickle.load(file)
                pos += 1
            except EOFError:
                break
        return pos

    def save(self, data: np.ndarray) -> None:
        """Pickles the obejct to hdd """
        with open(self._filename, 'ab+') as f:
            pickle.dump(data, f)
            self._pos += 1

    def __getitem__(self, idx: int) -> np.ndarray:
        assert idx < self._pos, EOFError("File is not long enough")
        with open(self._filename, 'rb') as f:
            tmp = 0
            while tmp <= idx:
                data = pickle.load(f)
                tmp += 1
        return data

    def __len__(self) -> int:
        return self._pos
类文件保存器:
def uuu init uuuu(self,文件名:str):
self.\u filename=文件名
尝试:
f=打开(自身文件名“rb”)
self.\u pos=self.\u get\u len(f)
除FileNotFoundError外:
自身位置=0
def_get_len(self,file)->int:
pos=0
尽管如此:
尝试:
pickle.load(文件)
pos+=1
除EOFError外:
打破
返回位置
def保存(自身,数据:np.ndarray)->无:
“”“将obejct pickle到hdd”“”
将open(self._文件名'ab+')作为f:
pickle.dump(数据,f)
自身位置+=1
def_uugetItem_uu(self,idx:int)->np.ndarray:
断言idx
该接口允许将另一个数组附加到现有数据库,并加载每个元素。然而,这种方法对我来说似乎有点奇怪:首先,要用
\uuu getitem\uuu
方法加载数组,我必须循环遍历文件,不能直接打开元素
idx
。其次,save对象中元素的初始数量在
\u get\u len
方法中确定,该方法在文件中循环,直到出现错误

是否有人有更好的办法将随机数(高维)的numpy阵列保存并从硬盘加载?

您可以使用(或替代)

您将找到一个如何使用h5py的简短示例。进一步的文档可以在其网站上找到。

关于
np.save()
,和
np.load()