Convertir un numpy.ndarray à string (ou bytes) et le convertir en numpy.ndarray

je vais avoir un peu de mal à ici

je suis en train de convertir un numpy.ndarray à la chaîne, je l'ai déjà fait comme ceci:

randomArray.tostring()

Il fonctionne, mais je me demande si je peux le transformer en un rien.ndarray.

Quelle est la meilleure façon de le faire?

j'utilise numpy 1.8.1

Contexte: L'objectif est d'envoyer le numpy.ndarray comme un message dans rabbitmq (pika bibliothèque)

19
demandé sur Ampo 2015-05-11 15:22:52

4 réponses

Vous pouvez utiliser la méthode fromstring pour ceci:

arr =np.array([1,2,3,4,5,6])
ts = arr.tostring()
print np.fromstring(ts,dtype=int)

>>>[1 2 3 4 5 6]

désolé pour la réponse courte, pas assez de points pour commenter. Rappelez-vous d'indiquer les types de données ou vous finirez dans un monde de douleur.

14
répondu ajsp 2015-05-11 12:55:02

Si vous utilisez tostring vous perdez des informations à la fois sur la forme et le type de données:

>>> import numpy as np
>>> a = np.arange(12).reshape(3, 4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> s = a.tostring()
>>> aa = np.fromstring(a)
>>> aa
array([  0.00000000e+000,   4.94065646e-324,   9.88131292e-324,
         1.48219694e-323,   1.97626258e-323,   2.47032823e-323,
         2.96439388e-323,   3.45845952e-323,   3.95252517e-323,
         4.44659081e-323,   4.94065646e-323,   5.43472210e-323])
>>> aa = np.fromstring(a, dtype=int)
>>> aa
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> aa = np.fromstring(a, dtype=int).reshape(3, 4)
>>> aa
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

cela signifie que vous devez envoyer les métadonnées avec les données au destinataire. Pour échanger des objets auto-consistants, essayez cPickle:

>>> import cPickle
>>> s = cPickle.dumps(a)
>>> cPickle.loads(s)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
18
répondu simleo 2015-05-11 13:49:08

Imaginez que vous ayez un numpy tableau d'entiers (cela fonctionne avec d'autres types mais vous avez besoin d'une légère modification). Vous pouvez faire ceci:

a = np.array([0, 3, 5])
a_str = ','.join(str(x) for x in a) # '0,3,5'
a2 = np.array([int(x) for x in a_str.split(',')]) # np.array([0, 3, 5])

Si vous avez un tableau de float, assurez-vous de remplacer int par float dans la dernière ligne.

vous pouvez aussi utiliser le __repr__() méthode, qui aura l'avantage de travailler pour les tableaux multidimensionnels:

from numpy import array
numpy.set_printoptions(threshold=numpy.nan)
a = array([[0,3,5],[2,3,4]])
a_str = a.__repr__() # 'array([[0, 3, 5],\n       [2, 3, 4]])'
a2 = eval(a_str) # array([[0, 3, 5],
                 #        [2, 3, 4]])
7
répondu Julien Spronck 2015-05-11 13:31:19

Imaginez que vous ayez un numpy tableau de texte comme dans un messager

 >>> stex[40]
 array(['Know the famous thing ...

et vous souhaitez obtenir des statistiques à partir du corpus (texte, col=11), vous devez d'abord obtenir les valeurs de dataframe (df5) et ensuite rejoindre tous les enregistrements en un seul corpus:

 >>> stex = (df5.ix[0:,[11]]).values
 >>> a_str = ','.join(str(x) for x in stex)
 >>> a_str = a_str.split()
 >>> fd2 = nltk.FreqDist(a_str)
 >>> fd2.most_common(50)
-2
répondu Max Kleiner 2018-07-12 15:34:54