2016-01-06 15 views
5

jestem zdezorientowany zachowaniem typu konwersji przy konstruowaniu zorganizowany/recarray:pyton skonstruowany/recarray zachowanie typu konwersja

Ten prosty przykład zaczyna się w polach liczbowych ale definiuje typ jako wyrażenie:

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

która produkuje:

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

więc wartości przeliczono na pustych strunach, które nie jest to, czego można oczekiwać od:

str(1.0) 

Który produkuje ciąg '1.0'. Co powoduje takie zachowanie?

Odpowiedz

6

Musisz podać szerokość łańcucha, np. „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')]) 

Wystarczy za pomocą str skutecznie oznacza pole ciąg 0 bajtów - co oczywiście jest zbyt mała, aby utrzymać interpretację ciąg pływaka.