我是Matlab和C++用户,最近发现python(spyder)可以替代两者。我认为python的主要优点之一是能够在解释器模式下工作,然后在我对结果满意后无缝将其转换为快速编译代码。解释环境非常适合原型(prototype)制作、在断点处停止时分析数据、到处抛出绘图和图像等。我开始研究Cython,但我并不完全了解编程流程。比方说你有一个.py代码你想加速-你必须从头开始写一个.pyx文件吗?你能在解释模式下运行一个.pyx文件,就好像它是一个普通的.py文件一样(在编译之前)吗?如何调试.pyx文件中的代码? 最佳答案 我对C
最终更新这个问题是关于如何写一个setup.py这将编译一个直接访问FORTRAN代码的cython模块,就像C一样。这是一个相当漫长而艰巨的解决方案之旅,但完整的困惑包含在下面作为上下文。原问题我有一个扩展名,它是一个Cython文件,它设置了一些堆内存并将其传递给fortran代码,还有一个fortran文件,这是一个古老的模块,如果可以,我希望避免重新实现。.pyx文件可以很好地编译为C,但是cython编译器在.f90上卡住了带有以下错误的文件:$pythonsetup.pybuild_ext--inplacerunningbuild_extcythoningdelaunay/
快速版:如何在Cython中声明一个抽象类?目标是只声明接口(interface),以便其他类可以从它继承,这个类必须没有实现。接口(interface).pxd:cdefclassIModel:cdefvoiddo_smth(self)实现.pyx:frominterfacecimportIModelcdefclassA(IModel):cdefvoiddo_smth(self):pass一切都很好地编译,但是当我在python中导入impl.so时,我得到以下信息:ImportError:Nomodulenamedinterface显然该方法并不是真正的虚拟方法,python需要I
考虑这个虚拟的Cython代码:#!python#cython:boundscheck=False#cython:wraparound=False#cython:initializedcheck=False#cython:cdivision=True#cython:nonecheck=Falseimportnumpyasnp#iteratorfunctioncdefdouble[:]f(double[:]data):data[0]*=1.01data[1]*=1.02returndata#loopingfunctioncdefdouble[:]_call_me(intbignumber
问题有没有办法用模板为Cython包装的C++类创建Python包装器?(即完全按照此处显示的内容进行操作,但使用模板:http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#create-cython-wrapper-class)。我知道融合类型解决方法(https://groups.google.com/forum/#!topic/cython-users/qQpMo3hGQqI),但这不允许您实例化像vector>这样的类:毫不奇怪,融合类型没有递归的概念。改写我想实现的是包装类,例如:cdefexternfrom
我有一个函数foo,它将指向内存的指针作为参数,并写入和读取该内存:cdefvoidfoo(double*data):data[some_index_int]=some_value_doubledo_something_dependent_on(data)我像这样分配给data:cdefintN=some_intcdefdouble*data=malloc(N*sizeof(double))cdefintiforiincython.parallel.prange(N,nogil=True):foo(data)readout(data)我现在的问题是:不同的线程如何处理这个问题?我的猜测
我有一个.pyx文件,我在其中定义了一些函数,例如cdefdoublefoo(doublea)nogil:return3.*a我如何在pyx文件之外对此类函数的行为进行单元测试?由于它们是cdef,我无法简单地导入它们... 最佳答案 要测试cdef功能,您需要在Cython中编写测试。可以尝试使用cpdef函数,但并非所有签名都可以在这种情况下使用(例如使用指针的签名,如int*、float*等等)。要访问cdef函数,您需要通过pxd文件“导出”它们(对于cdef-functionsofextensiontypes也可以这样做)
我写了一个小的cython代码是#t3.pyxfromlibc.stdlibcimportatoicdefintfun(char*s):returnatoi(s)setup.py文件是fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("t3.pyx"))我使用此命令运行setup.pypythonsetup.pybuild_ext--inplace这给了我Compilingt3.pyxbecauseitchanged.Cythonizingt3.pyxrunni
我目前正在尝试优化我的Python程序并开始使用Cython以减少函数调用开销,并且可能稍后包括优化的C库函数。所以我遇到了第一个问题:我在我的代码中使用组合来创建一个更大的类。到目前为止,我已经将我的一个Python类转换为Cython(这已经够难了)。这是代码:importnumpyasnpcimportnumpyasnpctypedefnp.float64_tdtype_tctypedefnp.complex128_tcplxtype_tctypedefPy_ssize_tindex_tcdefclassbendingForcesClass(object):cdefdtype_t
在Windows下,似乎easy_install具有C依赖性并不是很容易。尝试1-vcvarsall.bat错误我正在Windows7下安装cython,使用MinGw;我修改了Windows7的PATH以包含C:\MinGw\bin。此时,我尝试easy_install-Ucython,得到...C:\Users\mike_pennington\Desktop\TestDrive>easy_install-UcythonSearchingforcythonReadinghttp://pypi.python.org/simple/cython/Readinghttp://www.cyt