gpt4 book ai didi

python - 将numpy数组转储为字符串的最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:50 25 4
gpt4 key购买 nike

我需要用命名数据 block 组织一个数据文件。数据是 NUMPY 数组。但我不想使用 numpy.save 或 numpy.savez 函数,因为在某些情况下,数据必须通过管道或其他接口(interface)在服务器上发送。所以我想将 numpy 数组转储到内存中,压缩它,然后将它发送到服务器。

我试过简单的 pickle ,像这样:

try:
import cPickle as pkl
except:
import pickle as pkl
import ziplib
import numpy as np

def send_to_db(data, compress=5):
send( zlib.compress(pkl.dumps(data),compress) )

.. 但这是一个极其缓慢的过程。

即使使用压缩级别 0(不压缩),这个过程也非常缓慢,这只是因为 pickle 。

有什么方法可以不用 pickle 将 numpy 数组转储到字符串中吗?我知道 numpy 允许获取缓冲区 numpy.getbuffer ,但对我来说并不明显,如何使用这个转储缓冲区来获取数组。

最佳答案

你绝对应该使用 numpy.save,你仍然可以在内存中进行:

>>> import io
>>> import numpy as np
>>> import zlib
>>> f = io.BytesIO()
>>> arr = np.random.rand(100, 100)
>>> np.save(f, arr)
>>> compressed = zlib.compress(f.getbuffer())

解压,逆向过程:

>>> np.load(io.BytesIO(zlib.decompress(compressed)))
array([[ 0.80881898, 0.50553303, 0.03859795, ..., 0.05850996,
0.9174782 , 0.48671767],
[ 0.79715979, 0.81465744, 0.93529834, ..., 0.53577085,
0.59098735, 0.22716425],
[ 0.49570713, 0.09599001, 0.74023709, ..., 0.85172897,
0.05066641, 0.10364143],
...,
[ 0.89720137, 0.60616688, 0.62966729, ..., 0.6206728 ,
0.96160519, 0.69746633],
[ 0.59276237, 0.71586014, 0.35959289, ..., 0.46977027,
0.46586237, 0.10949621],
[ 0.8075795 , 0.70107856, 0.81389246, ..., 0.92068768,
0.38013495, 0.21489793]])
>>>

如您所见,这与我们之前保存的内容相匹配:

>>> arr
array([[ 0.80881898, 0.50553303, 0.03859795, ..., 0.05850996,
0.9174782 , 0.48671767],
[ 0.79715979, 0.81465744, 0.93529834, ..., 0.53577085,
0.59098735, 0.22716425],
[ 0.49570713, 0.09599001, 0.74023709, ..., 0.85172897,
0.05066641, 0.10364143],
...,
[ 0.89720137, 0.60616688, 0.62966729, ..., 0.6206728 ,
0.96160519, 0.69746633],
[ 0.59276237, 0.71586014, 0.35959289, ..., 0.46977027,
0.46586237, 0.10949621],
[ 0.8075795 , 0.70107856, 0.81389246, ..., 0.92068768,
0.38013495, 0.21489793]])
>>>

关于python - 将numpy数组转储为字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43925624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com