2013-02-09 29 views
8

Tôi có hai mảng của chuỗi:dtypes. Sự khác nhau giữa S1 và S2 bằng 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') 

sự khác biệt giữa S1 và S2 là gì? Nó chỉ là họ giữ các mục có chiều dài khác nhau?

Điều gì sẽ xảy ra nếu mảng của tôi có các chuỗi là độ dài khác nhau?

Tôi có thể tìm danh sách tất cả các loại dtypes có thể có và ý nghĩa của chúng?

Trả lời

16

Xem dtypes documentation.

Các chuỗi |S1|S2 là các bộ mô tả kiểu dữ liệu; đầu tiên có nghĩa là mảng giữ các chuỗi có chiều dài 1, chiều dài thứ hai. 2. Biểu tượng ống |byteorder flag; trong trường hợp này không cần cờ đặt hàng byte, do đó, nó được đặt thành |, có nghĩa là không áp dụng.

+0

Tôi nghĩ điều này rung chuông - http://stackoverflow.com/questions/13997087/what-are-the-available-datatypes-for-dtype-with-numpys-loadtxt-an- genfromtxt –

+0

Cảm ơn! Điều gì sẽ xảy ra nếu mảng của tôi có các chuỗi có độ dài khác nhau? Có loại S đặc biệt nào không? –

+1

@ user273158: Mảng có thể * chỉ * chứa các mục có độ dài cố định; các chuỗi có độ dài thay đổi không được hỗ trợ. –

1

Để lưu trữ các chuỗi có độ dài biến trong một mảng numpy bạn có thể lưu trữ chúng như là các đối tượng python. Ví dụ:

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] 
Các vấn đề liên quan