创建一个简单的数据库来存储和加载随机数的高维 numpy 数组的好方法是什么?
What is a good way to create a simple database to store and load a random number of high-dimensional numpy arrays?
一个计算过程创建了一个随机数的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
该界面允许将另一个数组附加到现有数据库并加载每个元素。但是,这个方法对我来说似乎有点奇怪:首先,要使用 __getitem__
方法加载数组,我必须循环遍历文件并且不能直接打开元素 idx
。其次,保存对象中元素的初始数量在 _get_len
循环文件直到发生错误的方法中确定。
有没有人有更好的主意来将随机数(高维)的 numpy 数组保存到硬盘或从硬盘加载?
一个计算过程创建了一个随机数的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
该界面允许将另一个数组附加到现有数据库并加载每个元素。但是,这个方法对我来说似乎有点奇怪:首先,要使用 __getitem__
方法加载数组,我必须循环遍历文件并且不能直接打开元素 idx
。其次,保存对象中元素的初始数量在 _get_len
循环文件直到发生错误的方法中确定。
有没有人有更好的主意来将随机数(高维)的 numpy 数组保存到硬盘或从硬盘加载?