我正在开发一个 pytorch 项目,我的数据保存在zarr
.
随机访问的zarr
成本很高,但由于zarr
使用了块式缓存,迭代速度非常快。为了利用这一事实,我与多个工作人员一起使用IterableDataset
:
class Data(IterableDataset):
def __init__(self, path, start=None, end=None):
super(Data, self).__init__()
store = zarr.DirectoryStore(path)
self.array = zarr.open(store, mode='r')
if start is None:
start = 0
if end is None:
end = self.array.shape[0]
assert end > start
self.start = start
self.end = end
def __iter__(self):
return islice(self.array, self.start, self.end)
Run Code Online (Sandbox Code Playgroud)
问题是,对于连续的工作人员,随着行的顺序,自然self.array
会变得更大,创建生成器会在我的训练/验证过程中花费大量时间,因为仍然需要迭代不需要的元素,直到它到达。一旦为每个工作人员创建了一个生成器,这就像一个魅力,但实现这一目标需要很长时间。10e9
self.start
self.end
itertools.islice(array, start, end)
islice
start
有没有更好的方法来创建这样的生成器?或者也许有更聪明的方法来zarr
使用pytorch
?
我有一个非常大的数据集,我通过 append 以块的形式写入 hdf5,如下所示:
with pd.HDFStore(self.train_store_path) as train_store:
for filepath in tqdm(filepaths):
with open(filepath, 'rb') as file:
frame = pickle.load(file)
if frame.empty:
os.remove(filepath)
continue
try:
train_store.append(
key='dataset', value=frame,
min_itemsize=itemsize_dict)
os.remove(filepath)
except KeyError as e:
print(e)
except ValueError as e:
print(frame)
print(e)
except Exception as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
数据太大而无法加载到一个 DataFrame 中,因此我想尝试使用 vaex 进行进一步处理。不过有几件事我真的不明白。
由于 vaex 在 hdf5 中使用与 pandas/pytables (VOTable) 不同的表示形式,我想知道如何在这两种格式之间进行转换。我尝试将数据分块加载到 Pandas 中,将其转换为 vaex DataFrame 然后存储它,但似乎无法将数据附加到现有的 vaex hdf5 文件中,至少我找不到。
真的没有办法从 vaex 内部创建大型 hdf5 数据集吗?是将现有数据集转换为 vaex 表示的唯一选择(通过 python 脚本或 TOPCAT 构建文件)吗?
与我之前的问题相关,如果我在 vaex …
我正在为监督学习任务准备一个大型多元时间序列数据集,我想创建输入特征的时移版本,以便我的模型也可以从过去的值中进行推断。在pandas
还有的shift(n)
,可以让你的命令由移动一列n
列。有没有类似的东西vaex
?
我在vaex
文档中找不到任何可比的东西。
当我输入超过3个字符时,我的系统会给我a/m错误
a = input('Please type f0 or f1: ' , 's');
if a == 'f0';
Run_f0
elseif a == 'f1';
Run_f1
else
disp('Please enter f0 or f1 only');
end
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个错误?提前致谢