簡體   English   中英

保存許多不同長度的數組

[英]Saving many arrays of different lengths

我有~8000個二維點數組,存儲在內存中作為numpy數組的Python列表。 每個陣列具有形狀(x,2) ,其中x是介於~600和~4000之間的數字。 基本上,我有一個鋸齒狀的3-d陣列。

我想以方便/快速的格式存儲這些數據,以便從磁盤讀取/寫入。 我寧願不創建~8000個單獨的文件,但如果我可以避免它,我也不願用零填充一個完整的(8000,4000,2)矩陣。

我應該如何將我的數據存儲在磁盤上,以便最小化文件大小和解析/序列化?

有一種稱為HDF的標准用於存儲大量數據集。 您可以在以下鏈接中找到一些信息,但一般而言,HDF定義了可用於大型信息存儲的二進制文件格式。

您可以在此處找到一個在磁盤上存儲大型Numpy陣列的示例。 在那篇文章中,作者對Python Pickle和HDF5進行了比較。

我也建議你這樣介紹HDF5。 這是 h5py包,它是HDF5二進制數據格式的Pythonic接口。

將所有numpy數組放入一個python列表中,然后picklecPickle列出該列表。

例如:

import cPickle
from numpy import array, ones
a = array((5,2))
b = ones((10,2))
c = array((20,2))
all = [a,b,c]
cPickle.dump(all, open('all_my_arrays', 'w'))

然后您可以使用以下方法檢索它

all2 = cPickle.load(open('all_my_arrays'))

請注意,列表all不需要任何大量的新內存分配。 因為all只是一個指向numpy數組的指針列表,所以不必用零填充或以其他方式復制。

相對於pickle,HDF5作為大型陣列上的速度和跨應用支持(八度,perl等)的優勢。 另一方面, pickle的優點是不需要任何額外的軟件安裝(它包含在python中),並且它本身也理解python對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM