Чтобы отделить реальную часть от сложной части в cython, я обычно использовал complex.real
и complex.imag
для работы. Однако это генерирует код, окрашенный в слегка красный цвет питона в html
-выводе, и я предполагаю, что вместо этого я должен использовать creal(complex)
и cimag(complex)
.
Рассмотрим пример ниже:
cdef double complex myfun():
cdef double complex c1,c2,c3
c1=1.0 + 1.2j
c2=2.2 + 13.4j
c3=c2.real + c1*c2.imag
c3=creal(c2) + c1*c2.imag
c3=creal(c2) + c1*cimag(c2)
return c2
Задания на c3
дают:
__pyx_v_c3 = __Pyx_c_sum(__pyx_t_double_complex_from_parts(__Pyx_CREAL(__pyx_v_c2), 0), __Pyx_c_prod(__pyx_v_c1, __pyx_t_double_complex_from_parts(__Pyx_CIMAG(__pyx_v_c2), 0)));
__pyx_v_c3 = __Pyx_c_sum(__pyx_t_double_complex_from_parts(creal(__pyx_v_c2), 0), __Pyx_c_prod(__pyx_v_c1, __pyx_t_double_complex_from_parts(__Pyx_CIMAG(__pyx_v_c2), 0)));
__pyx_v_c3 = __Pyx_c_sum(__pyx_t_double_complex_from_parts(creal(__pyx_v_c2), 0), __Pyx_c_prod(__pyx_v_c1, __pyx_t_double_complex_from_parts(cimag(__pyx_v_c2), 0)));
где первая строка для использования конструкции (цвета питона) __Pyx_CREAL
и __Pyx_CIMAG
.
Почему это так, и влияет ли это на производительность «значительно»?