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)
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.
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]])
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]])
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)