Python 创建简单数据库以存储和加载随机数目的高维numpy数组的好方法是什么?
一个计算过程会创建一个随机数目的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')
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()
?