web-dev-qa-db-fra.com

Convertir un tableau d'octets en tableau numpy

Vous pouvez convertir un tableau numpy en octets en utilisant la fonction .tobytes().

Comment le décoder de ce tableau d'octets en tableau numpy? J'ai essayé comme ça pour le tableau i de forme (28,28)

>>k=i.tobytes()

>>np.frombuffer(k)==i

False

également essayé avec uint8 aussi.

11
Gautham Santhosh

Quelques problèmes avec ce que vous faites:

  1. frombuffer interprétera toujours l'entrée comme un tableau à 1 dimension. C'est la première ligne du documentation . Donc, il vous faudrait refaçonner pour être (28, 28).

  2. La valeur par défaut dtype est float. Donc, si vous n'avez pas sérialisé les flottants, vous devrez alors spécifier le dtype manuellement (personne ne peut dire ce qu'un flux d'octets signifie: vous devez dire ce qu'ils représentent).

  3. Si vous voulez vous assurer que les tableaux sont égaux, vous devez utiliser np.array_equal. En utilisant == effectuera une opération élémentaire et renverra un tableau numpy de bools (ce n'est probablement pas ce que vous voulez).

Comment le décoder de ce tableau d'octets en tableau numpy?

Exemple:

In [3]: i = np.arange(28*28).reshape(28, 28)

In [4]: k = i.tobytes()

In [5]: y = np.frombuffer(k, dtype=i.dtype)

In [6]: y.shape
Out[6]: (784,)

In [7]: np.array_equal(y.reshape(28, 28), i)
Out[7]: True

HTH.

11
Matt Messersmith