Уменьшение размера закодированного Python dict, содержащего numpy массивы для интерфейса - PullRequest
1 голос
/ 18 апреля 2020

У меня есть python словарь, который содержит NumPy массив размеров (2, 99, 5) для своих значений, поэтому дикт выглядит так:

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

Я пытаюсь отправить этот диктат на фронтэнд.

Сначала я преобразую все эти NumPy массивы в python список с помощью метода tolist, затем я использовал JSON, чтобы вывести из памяти.

Размер JSON файл составляет 349 КБ. Я хотел бы знать, каков наилучший способ кодирования словаря для уменьшения размера результирующего файла, который все еще можно быстро кодировать.

Я думал о сжатии JSON. Как лучше всего сжать такой файл?

Заранее спасибо.

1 Ответ

0 голосов
/ 18 апреля 2020

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 сжимает.

...