La conversion de int tableaux de tableaux de chaîne dans numpy sans troncature
D'essayer de convertir int tableaux de tableaux de chaîne dans numpy
In [66]: a=array([0,33,4444522])
In [67]: a.astype(str)
Out[67]:
array(['0', '3', '4'],
dtype='|S1')
Pas ce que j'ai prévu
In [68]: a.astype('S10')
Out[68]:
array(['0', '33', '4444522'],
dtype='|S10')
Cela fonctionne, mais j'ai eu à connaître de 10 a été assez grand pour contenir ma chaîne la plus longue. Est-il un moyen de le faire facilement, sans savoir à l'avance quelle est la taille de la chaîne dont vous avez besoin? Il semble un peu dangereux qu'il vient tranquillement tronque votre chaîne sans jeter une erreur.
- Pour les visiteurs à partir de 2018 et au-delà:
a.astype(str)
va maintenant travailler exactement comme souhaité.
Vous devez vous connecter pour publier un commentaire.
Encore une fois, cela peut être résolu en pur Python:
Ou si vous avez besoin de convertir en arrière:
Vous pouvez rester dans numpy, faire
C'est deux fois plus rapide que
map
ou interprétations de la liste de 10 éléments, quatre fois plus rapide pour 100. Ceci et d'autres opérations de la chaîne sont documentées ici.Vous pouvez trouver la plus petite largeur est suffisante comme suit:
Sinon, juste à construire la
ndarray
à partir d'une liste de chaînes de caractères:ou, à l'aide de
map()
:map()
est une meilleure option que d'une compréhension de liste, car il pousse l'exécution du code en C.map
peut être légèrement plus rapide (dans cet exemple, il est d'environ 3% plus rapide que l'utilisation d'une compréhension de liste pour moi), mais ce n'est pas toujours le cas, et les interprétations de la liste sont considérés comme plus pythonic. Voir stackoverflow.com/a/1247490/1191119Utilisation
arr.astype(str)
, commeint
àstr
de conversion est maintenant pris en charge parnumpy
avec le résultat souhaité:np.apply_along_axis(lambda y: [str(i) for i in y], 0, x)
Exemple