Numpy восстановление из байтов или строки - PullRequest
0 голосов
/ 26 марта 2020

У меня есть процесс, в котором мне нужно преобразовать numpy recarray в байты, и после этого восстановить recarray из байтов.

Однако я не уверен, как восстановить массив из байтов .

Кто-нибудь знает, как я могу это сделать?

Пример кода:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.zeros(500))
rec = df.to_records()
rec_s = rec.tostring()  # this returns a bytes object

# perform some computation

new_rec = <method to recover from bytes>(rec_s)

Примечание: на самом деле мне не нужно использовать numpy повторюсь, просто некоторая структура, которая позволит мне преобразовать pandas фрейм данных в байтовый объект, а также восстановить его.

1 Ответ

1 голос
/ 26 марта 2020
In [497]: arr = np.ones(3, dtype='i,i,f')                                                      
In [498]: arr                                                                                  
Out[498]: 
array([(1, 1, 1.), (1, 1, 1.), (1, 1, 1.)],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4')])
In [499]: astr = arr.tostring()                                                                
In [500]: astr                                                                                 
Out[500]: b'\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80?\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80?\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80?'

Восстановите его, используя тот же тип d:

In [502]: np.frombuffer(astr, arr.dtype)                                                       
Out[502]: 
array([(1, 1, 1.), (1, 1, 1.), (1, 1, 1.)],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4')])

Если бы источник был 2d, вам также пришлось бы изменить форму

...