Pregunta ¿Cómo creo matrices de caracteres en numpy?


Digamos que tengo la siguiente matriz:

import numpy as np
a = ['hello','snake','plate']

Quiero que esto se convierta en una matriz numpy b así que eso:

b[0,0] = 'h'
b[0,1] = 'e'
b[0,2] = 'l'
b[1,0] = 's'
...

Quiero que los trucos numpy estándar funcionen, como la radiodifusión, la comparación, etc.

¿Cómo se hace? ¿Y dónde está esto en la documentación numpy?

¡Gracias!

Uri


12
2018-02-28 05:21


origen


Respuestas:


Puede crear una matriz de caracteres numpy directamente, p. Ej .:

b = np.array([ ['h','e','l','l','o'],['s','n','a','k','e'],['p','l','a','t','e'] ])

Los trucos de matriz habituales funcionan con esto.

Si usted tiene a y deseo generar b de ella, tenga en cuenta que:

list('hello') == ['h','e','l','l','o']

Entonces puedes hacer algo como:

b = np.array([ list(word) for word in a ])

Sin embargo, si a tiene palabras de longitud desigual (p. ['snakes','on','a','plane']), ¿qué quieres hacer con las palabras más cortas? Podría rellenarlos con espacios para la palabra más larga:

wid = max(len(w) for w in a)
b = np.array([ list(w.center(wid)) for w in a])

Que la string.center(width) almohadillas con espacios, centrando la cadena. También podrías usar rjust o ljust (ver documentos de cuerda)


8
2018-02-28 05:29



En realidad, puedes hacer esto sin copias o listas de comprensiones en numpy (advertencias sobre cadenas de longitud no igual a un lado ...). Simplemente visualícelo como una matriz de cadenas de 1 caracteres y modifíquela:

import numpy as np

x = np.array(['hello','snake','plate'], dtype=str)
y = x.view('S1').reshape((x.size, -1))

print repr(y)

Esto produce:

array([['h', 'e', 'l', 'l', 'o'],
       ['s', 'n', 'a', 'k', 'e'],
       ['p', 'l', 'a', 't', 'e']], 
      dtype='|S1')

Sin embargo, en términos generales, evitaría el uso de matrices numpy para almacenar cadenas en la mayoría de los casos. Hay casos en los que es útil, pero por lo general es mejor que se apegue a las estructuras de datos que permiten cadenas de longitud variable, por ejemplo, que contienen cadenas.


17
2018-02-29 03:28