2013-02-09 19 views
8

Ho due array di stringhe:dtypes. Differenza tra S1 e S2 in Python

In [51]: r['Z'] 
Out[51]: 
array(['0', '0', '0', ..., '0', '0', '0'], 
     dtype='|S1') 

In [52]: r['Y']                             
Out[52]: 
array(['X0', 'X0', 'X0', ..., 'X0', 'X1', 'X1'], 
     dtype='|S2') 

Qual è la differenza tra S1 e S2? È solo che contengono voci di lunghezza diversa?

E se i miei array hanno stringhe di lunghezze diverse?

Dove posso trovare un elenco di tutti i possibili tipi e di che cosa significano?

risposta

16

Vedere dtypes documentation.

Le stringhe |S1 e |S2 sono descrittori di tipi di dati; il primo significa che l'array contiene stringhe di lunghezza 1, la seconda di lunghezza 2. Il simbolo di tubo | è byteorder flag; in questo caso non è necessario alcun flag di ordine dei byte, quindi è impostato su |, ovvero non applicabile.

+0

ho pensato che questo ha squillato un campanello - http://stackoverflow.com/questions/13997087/what-are-the-available-datatypes-for-dtype-with-numpys-loadtxt-an- genfromtxt –

+0

Grazie! Cosa accadrebbe se i miei array avessero stringhe di diversa lunghezza? C'è un tipo S speciale per quello? –

+1

@ user273158: Gli array possono * solo * contenere articoli a lunghezza fissa; le stringhe a lunghezza variabile non sono supportate. –

1

Per memorizzare stringhe di lunghezza variabile in un array numpy è possibile memorizzarli come oggetti python. Per esempio:

In [456]: x=np.array(('abagd','ds','asdfasdf'),dtype=np.object_) 

In [457]: x[0] 
Out[457]: 'abagd' 

In [459]: map(len,x) 
Out[459]: [5, 2, 8] 

In [460]: x[1]=='ds' 
Out[460]: True 

In [461]: x 
Out[461]: array([abagd, ds, asdfasdf], dtype=object) 

In [462]: str(x) 
Out[462]: '[abagd ds asdfasdf]' 

In [463]: x.tolist() 
Out[463]: ['abagd', 'ds', 'asdfasdf'] 

In [464]: map(type,x) 
Out[464]: [str, str, str] 
Problemi correlati