2013-02-09 64 views
8

S1和S2之間的區別我有一個字符串的兩個數組:dtypes。在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') 

是什麼S1和S2之間的區別?只是他們持有不同長度的參賽作品嗎?

如果我的陣列有不同長度的字符串

我在哪裏可以找到所有可能的dtypes的列表以及它們的含義?

回答

16

請參閱dtypes documentation

|S1|S2字符串是數據類型描述符;第一種意思是數組保存長度爲1的字符串,第二種長度爲2. |管道符號爲byteorder flag;在這種情況下,不需要字節順序標誌,所以它被設置爲|,這意味着不適用。

+0

我認爲這搖鈴 - http://stackoverflow.com/questions/13997087/what-are-the-available-datatypes-for-dtype-with-numpys-loadtxt-an- genfromtxt – 2013-02-09 16:38:58

+0

謝謝!如果我的數組有不同長度的字符串會發生什麼?有沒有特殊的S型? – 2013-02-09 17:09:24

+1

@ user273158:數組* *只能*包含固定長度的項目;不支持可變長度的字符串。 – 2013-02-09 19:11:35

1

的字符串爲了存儲可變長度的串在一個numpy數組中,你可以將它們存儲爲python對象。例如:

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]