Преобразование массив numty объектов dtype в dtype-комплекс

У меня есть массив numpy, который я хочу преобразовать из объекта в сложный. Если я возьму этот массив как строку 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]) 

Но когда это объект dtype, и я пытаюсь его преобразовать, я получаю сообщение об ошибке, что требуется float. Почему это?

 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 

Чтобы преобразовать его, я использую два вызова метода astype, который кажется неуклюжим:

 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]) 

Я думаю, вы, возможно, захотите сделать следующее, в зависимости от того, что находится внутри типа объекта, и если нет каких-либо дополнений, о которых нужно беспокоиться:

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

Однако, если это не сработает, чего не было для какого-то небольшого кортежа, который я попробовал, работало:

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

Рассмотрите возможность использования структур numpy, а не объектов для базового dtype, у вас может быть меньше времени на все.