2016-01-06 19 views
5

Tôi đang bối rối bởi hành vi của loại chuyển đổi khi xây dựng một cấu trúc/recarray:python cấu trúc/recarray loại chuyển đổi hành vi

ví dụ đơn giản này có trong các lĩnh vực số nhưng định nghĩa kiểu như chuỗi:

data = [(1.0, 2), (3.0, 4)] 
np.array(data, dtype=[('x', str), ('y', int)]) 

nào sản xuất:

array([('', 2), ('', 4)], dtype=[('x', 'S'), ('y', '<i8')]) 

Vì vậy, các giá trị đã được chuyển đổi sang chuỗi rỗng mà không phải là những gì bạn mong chờ từ:

str(1.0) 

Sản xuất chuỗi '1.0'. Điều gì gây ra hành vi này?

Trả lời

6

Bạn cần chỉ định chiều rộng chuỗi, ví dụ: 'a3':

>>> np.array([(1.0, 2),(3.0,4)],dtype=[('x','a3'),('y',int)]) 
array([('1.0', 2), ('3.0', 4)], 
     dtype=[('x', 'S3'), ('y', '<i4')]) 

Chỉ sử dụng str hiệu quả có nghĩa là trường chuỗi 0 byte - tất nhiên quá nhỏ để giữ biểu hiện chuỗi của phao.

Các vấn đề liên quan