큰 비 구조적 목록 (예 : a=[0,numpy.asarray([1,2,3])]
)을 저장하는 데 유용한 Python 라이브러리를 알고 계십니까?큰 비 구조적 목록을 파이썬에 저장
h5py는 이러한 종류의 데이터를 지원하지 않으며 피클은 느린 것 같습니다. 다른 대안들?
내 목적을 위해 동일한 유형의 데이터 (int 유형의 numpy 배열)이지만 다른 모양을 처리한다고 가정 할 수 있습니다.
큰 비 구조적 목록 (예 : a=[0,numpy.asarray([1,2,3])]
)을 저장하는 데 유용한 Python 라이브러리를 알고 계십니까?큰 비 구조적 목록을 파이썬에 저장
h5py는 이러한 종류의 데이터를 지원하지 않으며 피클은 느린 것 같습니다. 다른 대안들?
내 목적을 위해 동일한 유형의 데이터 (int 유형의 numpy 배열)이지만 다른 모양을 처리한다고 가정 할 수 있습니다.
실제로 수 저장하고 조금의 사용자 지정 논리와 hdf5
파일에 이러한 종류의 데이터를 검색 :
import tables
import numpy as np
def store(filename, name, data):
with tables.openFile(filename, 'w') as store:
store.createGroup('/', name)
for i, item in enumerate(data):
store.createArray('/%s' % name, 'item_%s' % i, item)
def read(filename, name):
with tables.openFile(filename, 'r') as store:
nodes = store.listNodes('/%s' % name)
data = [0] * len(nodes)
for node in nodes:
pos = int(node.name.split('_')[-1])
data[pos] = node.read()
return data
사용법 :
>>> a = [0, np.array([4,5,6])]
>>> store('my_data.h5', 'a', a)
>>> print read('my_data.h5', 'a')
[0, array([4, 5, 6])]
이 바로 제일 먼저 그게 내 마음에 가을, hdf5
파일에 목록을 저장하는보다 효율적인 패턴이 있다고 확신합니다. 그러나 시간을하자 심지어이 순진 구현 cPickle
보다 빠른 경우 참조 :
In [7]: a = []
for i in range(1, 500):
if i % 10 == 0:
a.append(i)
else:
a.append(np.random.randn(i, i))
In [8]: %%timeit
store('my_data.h5', 'a', a)
read_data = read('my_data.h5', 'a')
1 loops, best of 3: 1.32 s per loop
In [9]: %%timeit
with open('test.pickle', 'wb') as f:
cPickle.dump(a, f)
with open('test.pickle', 'rb') as f:
read_data = cPickle.load(f)
1 loops, best of 3: 1min 58s per loop
데이터에 따라 차이가 더 큰하거나 조금 작습니다. 그러나이 어리석은 구현이라도 numpy
배열을 포함하는 모든 데이터에 대해 cPickle
보다 적어도 10 배 더 빠릅니다.
깔끔하고 내가 필요한 것에 아주 가깝다. 고마워. – m4linka
Pickle 및 cPickle의 속도가 너무 느리다면 Marshall 또는 Shelve을 다른 두 가지 주요 상용품 직렬화 라이브러리로 간주해야합니다. 그것이 당신을 위해 작동하지 않는다면 당신은 합법적 인 데이터베이스를 사용하기를 원할 것입니다.
많은 양의 데이터를 신속하게 저장하고 검색 할 수있는 기능은 기본적으로 데이터베이스이며, 이러한 압축 모듈은 그쪽으로 나아갈 것입니다. 그들이 완벽했다면 데이터베이스가 필요 없을 것입니다.
이 두 가지 중 하나를 사용하고 싶지 않다면 실제로이 목적을위한 도구가 있지만 실제로는 일회용이라고 생각합니다. 그런 서비스에 대해 here을 볼 수는 있지만 더 많은 정보가 있습니다.
cPickle 또는 일반 피클을 사용 했습니까? – user2357112
가능한 중복 디스크에 numpy 배열을 보존하는 가장 좋은 방법 (http://stackoverflow.com/questions/9619199/best-way-to-preserve-numpy-arrays-on-disk) –
@SlaterTyranus 나는 그렇지 않다. 'numpy' 배열을 저장하지 않기 때문에 중복 된 것으로 생각하십시오. 예를 들어서 그는 스칼라 가치를 가지며 어쩌면 무엇을 알 수 있는지 알려줍니다. 대체로'numpy' 배열을 저장하는 것보다 더 일반적인 질문이라고 생각합니다. –