Как использовать Numpy .tobytes () для сериализации объектов - PullRequest
0 голосов
/ 04 сентября 2018

Как вы сериализовали / десериализовали массив numpy?

A           = np.random.randint(0, 10, 40).reshape(8, 5)
print(A)
print (A.dtype)
snapshot   = A
serialized = snapshot.tobytes()

    [[9 5 5 7 4]
     [3 8 8 1 0]
     [5 7 1 0 2]
     [2 2 7 1 2]
     [2 6 3 5 4]
     [7 5 4 8 3]
     [2 4 2 4 7]
     [3 4 2 6 2]]
    int64

Возвращает

 deserialized = np.frombuffer(serialized).astype(np.int64)
 print (deserialized)

 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0]

1 Ответ

0 голосов
/ 04 сентября 2018

Несоответствие между значением по умолчанию dtype, используемым для генерации A, и значением np.frombuffer. Работает должным образом при использовании правильного типа dtype (может зависеть от версии машины / Python / numpy):

# Python 3.6 64-bits with numpy 1.12.1 64-bits
A = np.random.randint(0, 10, 40).reshape(8, 5)
print(A)
>>> array([[3, 3, 5, 3, 9],
   [1, 4, 7, 1, 8],
   [1, 7, 4, 3, 0],
   [9, 2, 9, 1, 2],
   [2, 8, 9, 1, 1],
   [3, 3, 5, 2, 6],
   [5, 0, 2, 7, 6],
   [2, 8, 8, 0, 7]])
A.dtype
>>> dtype('int32')

deserialized = np.frombuffer(A.tobytes(), dtype=np.int32).reshape(A.shape)
print(deserialized)
>>> array([[3, 3, 5, 3, 9],
   [1, 4, 7, 1, 8],
   [1, 7, 4, 3, 0],
   [9, 2, 9, 1, 2],
   [2, 8, 9, 1, 1],
   [3, 3, 5, 2, 6],
   [5, 0, 2, 7, 6],
   [2, 8, 8, 0, 7]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...