2009-10-17 32 views
5

Estoy usando una numpy object_ array para almacenar cadenas de longitud variable, p. Ej.Cadena más larga en numpy object_ array

a = np.array(['hello','world','!'],dtype=np.object_) 

¿Hay una manera fácil de encontrar la longitud de la cadena más larga de la matriz sin bucle sobre todos los elementos?

Respuesta

5

max(a, key=len) le da la cadena más larga (y len(max(a, key=len)) le da su longitud) sin requerir que codifique un bucle explícito, pero por supuesto max hará su propio bucle internamente, ya que no podría identificar "la cadena más larga" de ninguna otra manera.

+1

Gran respuesta !!! –

0

No, ya que el único lugar donde se conoce la longitud de cada cadena es por la cadena. Entonces debes averiguar de cada cuerda cuál es su longitud.

2

Si almacena la cadena en una matriz numpy de objeto dtype, entonces no puede obtener el tamaño de los objetos (cadenas) sin bucles. Sin embargo, si dejar que decida el np.array dtype, entonces se puede averiguar la longitud de la cadena más larga de mira a escondidas en el dtype:

In [64]: a = np.array(['hello','world','!','Oooh gaaah booo gaah?']) 

In [65]: a.dtype 
Out[65]: dtype('|S21') 

In [72]: a.dtype.itemsize 
Out[72]: 21 
0

decir que quiero obtener la cadena más larga en la segunda columna:

data_array = [['BFNN' 'Forested bog without permafrost or patterning, no internal lawns'] 
      ['BONS' 'Nonpatterned, open, shrub-dominated bog']] 


def get_max_len_column_value(data_array, column): 
    return len(max(data_array[:,[column]], key=len)[0]) 

get_max_len_column_value(data_array, 1) 

>>>64