我认为该matlab格式是存储和检索numpy数组的一种非常方便的方法。确实非常快,并且磁盘和内存占用量完全相同。
但是,如果出于任何原因需要将numpy数组存储到SQLite中,建议添加一些压缩功能。
unutbu代码中的多余行非常简单
compressor = 'zlib' # zlib, bz2
def adapt_array(arr):
"""
http://stackoverflow.com/a/31312102/190597 (SoulNibbler)
"""
# zlib uses similar disk size that Matlab v5 .mat files
# bz2 compress 4 times zlib, but storing process is 20 times slower.
out = io.BytesIO()
np.save(out, arr)
out.seek(0)
return sqlite3.Binary(out.read().encode(compressor)) # zlib, bz2
def convert_array(text):
out = io.BytesIO(text)
out.seek(0)
out = io.BytesIO(out.read().decode(compressor))
return np.load(out)
使用MNIST数据库进行的测试结果为:
$ ./test_MNIST.py
[69900]: 99% remain: 0 secs
Storing 70000 im