2015-03-13 11 views
6

Mam tablicę numpy, którą chcę przekonwertować z obiektu na złożony. Jeśli wezmę tę tablicę jako dtype sznurka i przekształcić go, nie ma problemu:Konwertowanie tablicy numty obiektów typu dtype na typ dtype

In[22]: bane 
Out[22]: array(['1.000027337501943-7.331085223659654E-6j', 
     '1.0023086995640738-1.8228368353755985E-4j', 
     '-0.017014515914781394-0.2820013864855318j'], 
     dtype='|S41') 

In [23]: bane.astype(dtype=complex) 
Out[23]: 
array([ 1.00002734 -7.33108522e-06j, 1.00230870 -1.82283684e-04j, 
     -0.01701452 -2.82001386e-01j]) 

Ale kiedy jest dtype przedmiot i staram się je konwertować, pojawia się błąd, że wymagany jest pływak. Dlaczego to?

In [24]: bane.astype(dtype=object) 
Out[24]: 
array(['1.000027337501943-7.331085223659654E-6j', 
     '1.0023086995640738-1.8228368353755985E-4j', 
     '-0.017014515914781394-0.2820013864855318j'], dtype=object) 

In [25]: _.astype(dtype=complex) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-25-f5d89c8cc46c> in <module>() 
----> 1 _.astype(dtype=complex) 

TypeError: a float is required  

przekonwertować go, używam dwa wywołania metody astype który wydaje niezdarny:

bane_obj 
Out[27]: 
array(['1.000027337501943-7.331085223659654E-6j', 
     '1.0023086995640738-1.8228368353755985E-4j', 
     '-0.017014515914781394-0.2820013864855318j'], dtype=object) 

In [28]: bane_obj.astype(dtype=str).astype(dtype=complex) 
Out[28]: 
array([ 1.00002734 -7.33108522e-06j, 1.00230870 -1.82283684e-04j, 
     -0.01701452 -2.82001386e-01j]) 
+0

Może to być błąd NumPy. –

+0

Trudno powiedzieć, gdzie w kodzie 'numpy' zachodzi konwersja. Ciąg do złożonej konwersji prawdopodobnie działał przez długi czas, podczas gdy rozwój dtypów obiektów jest nowszy i trwa. Co to jest generowanie tego rodzaju tablicy obiektów? – hpaulj

+4

Tablica 'dtype = np.object' może zawierać dosłownie * dowolny * rodzaj obiektu Pythona, więc myślę, że zrozumiałe jest, że numpy developerzy nie zawracali sobie głowy zaimplementowaniem tutaj każdej możliwej reguły konwersji typu. Łączenie razem '.astype (np.str) .astype (np.complex)' wydaje się być całkiem rozsądnym obejściem tego, co musi być bardzo rzadkim przypadkiem użycia. Prawdziwe pytanie w moim umyśle brzmi: dlaczego masz do czynienia z tablicą 'np.object' zawierającą numery zespolone w formacie string! –

Odpowiedz

0

myślę, że chcesz wykonać następujące czynności, w zależności od tego, co jest w środku typu obiektu i jeśli nie ma wyściółka martwić:

bane.view(np.complex64) or 
bane.view(np.complex128) 

jednak jeśli to nie zadziała, których nie jakiegoś małego przykład krotki starałem się, co następuje pracował:

bane.astype(np.float).view(np.complex64) 

Zastanów się nad użyciem struktur typu numpy zamiast obiektów dla typu podstawowego, możesz mieć łatwiejszy czas nad wszystkimi.

Powiązane problemy