我在使用Cython时遇到了使用complex64_t的问题。下面是我的一个简单的Cython例子。
当我使用以下setup.py将文件进行cythonize处理时:
但不在此处。
cimport numpy as cnp
cdef extern from "complex.h":
double complex cexp(double complex)
cpdef example():
cdef float b = 2.0
cdef cnp.complex64_t temp1
cdef cnp.complex128_t temp2
temp1 = cexp(1j * b)
temp2 = cexp(1j * b)
当我使用以下setup.py将文件进行cythonize处理时:
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
import numpy as np
ext_modules = [
Extension(
"bug_example",
["bug_example.pyx"],
include_dirs=[np.get_include()],
)
]
setup(
name='bug_example',
ext_modules=cythonize(ext_modules, annotate=True,
compiler_directives={'boundscheck': False})
)
所有内容都能够编译通过,但是在包含以下代码的行上出现了黄色警告(不是纯C语言)
temp1 = cexp(1j * b)
但不在此处。
temp2 = cexp(1j * b)
似乎存在将双倍复杂值返回为浮点复杂值的问题。我已尝试将其显式转换为浮点复杂值,例如:
temp1 = <float complex>(cexp(1j * b))
但这并没有什么区别。
有人能帮我修复代码,让temp1这一行不再有黄色,并且是纯C语言。这将允许我在Cython中使用openmp。
__Pyx_CREAL
会扩展到__real__
扩展名。 - ead