减少包含用于前端的 numpy 数组的编码 Python dict 的大小

Posted

技术标签:

【中文标题】减少包含用于前端的 numpy 数组的编码 Python dict 的大小【英文标题】:Reducing the size of encoded Python dict containing numpy arrays for frontend 【发布时间】:2020-08-01 01:02:24 【问题描述】:

我有一个 python 字典,它的值包含大小为 (2, 99, 5) 的 NumPy 数组,所以字典看起来像这样:

    
        ‘key1’ :  big numpy array,
        ‘key2’ :  big numpy array,
        ‘key3’ :  big numpy array,
    

我正在尝试将此字典发送到前端。

首先,我使用tolist 方法将所有这些 NumPy 数组转换为 python 列表,然后,我使用 JSON 转储字典。

JSON 文件的大小为 349kb。我想知道对字典进行编码以减小仍能快速编码的结果文件的大小的最佳方法是什么。

我想到了压缩 JSON。压缩此类文件的最佳方法是什么?

提前谢谢你。

【问题讨论】:

【参考方案1】:

Json 不会压缩文件。它格式化结构。这样文件大小可能会增加。

你可以使用 gzip.compress()

In [1]: from sys import getsizeof                                                                                                                     

In [2]: import numpy as np                                                                                                                            

In [3]: a = np.random.randn(100,20)                                                                                                                   

In [4]: import gzip                                                                                                                                   

In [5]: az = gzip.compress(a)                                                                                                                         

In [6]: getsizeof(a)                                                                                                                                  
Out[6]: 16112

In [7]: getsizeof(az)                                                                                                                                 
Out[7]: 15415

In [8]: import json

In [10]: aj = json.dumps(a.tolist())                                                                                                                  

In [11]: getsizeof(aj)                                                                                                                                
Out[11]: 41532


您可以在这里看到 Json 将开销放在 gzip 压缩的地方。

【讨论】:

gzip 在 RAM 和 CPU 开销方面非常轻。

以上是关于减少包含用于前端的 numpy 数组的编码 Python dict 的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何将 numpy 二维数组作为一种可以用 C++ 读取的二进制格式存储到磁盘上

NumPy数组属性

PIL打开图像的numpy数组中的元素数量错误

如何在 Python3 中解码编码文字/字符串的 numpy 数组? AttributeError:“numpy.ndarray”对象没有属性“解码”

将嵌套的 .h5 组读入 numpy 数组

numpy基本操作