ndarray를 저장하는 방법 중에 npz라는 파일 포맷이 있었다.
numpy에서 지원하는 방법이며, ndarray를 저장할 때 pickle보다 여러 장점이 있다고 해서 찾아보게 되었다.
결론부터 말하면
ndarray를 저장하려고 한다면, npy/npz를 사용하는 것이 pickle보다 좋다고 생각한다. 추가적으로 npz compressed는 load 속도와 memory의 효율성은 있었지만 save 시간이 너무 오래걸렸다.
def write_pickle(samples, path):
with open(path, 'wb') as f:
pickle.dump(samples, f)
def write_npz(samples, path):
if samples.ndim == 1:
np.save(path, samples)
else:
np.savez(path, **{str(key): value for key, value in enumerate(samples)}) # 배열 크기만큼 ['0', '1', '2' . ..]로 key값이 저장됨
def write_compressed_npz(samples, path):
if samples.ndim == 1:
np.savez_compressed(path, **{'0': samples})
else:
np.savez_compressed(path, **{str(key): value for key, value in enumerate(samples)})
with open(path + 'data.pickle', 'rb') as f:
x = pickle.load(f)
x = np.load(path + 'data.npy')
x = np.load(path + 'data.npz')
x = np.load(path + 'data_compressed.npz')
def make_samples(size, count):
if count == 1:
samples = np.random.random_sample((size, ))
else:
samples = np.random.random_sample((count, size))
return samples
samples = make_samples(size, count) # size, count는 알아서 지정
여기서는 배열의 길이를 엄청 길게 설정(3억개)하여 테스트 해보았다.