2013-02-09 10 views
8

Mam dwie tablice ciągi:dtypes. Różnica między S1 i S2 w Pythonie

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') 

Jaka jest różnica między S1 i S2? Czy to jest po prostu, że mają wpisy o różnej długości?

Co zrobić, jeśli moje tablice mają ciągi o długości o różnych długościach?

Gdzie mogę znaleźć listę wszystkich możliwych dtypes i co one oznaczają?

Odpowiedz

16

Zobacz dtypes documentation.

Ciągi znaków |S1 i |S2 są deskryptorami typów danych; pierwszy oznacza, że ​​tablica zawiera ciągi o długości 1, druga o długości 2. Symbol rury | to byteorder flag; w tym przypadku nie jest wymagana flaga kolejności bajtów, więc jest ustawiona na |, co oznacza, że ​​nie dotyczy.

+0

myślałem, że to zadzwonił dzwonek - http://stackoverflow.com/questions/13997087/what-are-the-available-datatypes-for-dtype-with-numpys-loadtxt-an- genfromtxt –

+0

Dzięki! Co by się stało, gdyby moje tablice miały łańcuchy o różnej długości? Czy jest do tego specjalny typ S? –

+1

@ user273158: Tablice mogą * tylko * zawierać elementy o stałej długości; ciągi o zmiennej długości nie są obsługiwane. –

1

Do przechowywania ciągów zmiennej długości w tablicy numpy można przechowywać je jako obiekty Pythona. Na przykład:

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] 
Powiązane problemy