我正在将Python加速器(Numba、Cython、f2py)与简单的For循环和Numpy的einsum进行比较以解决特定问题(见下文)。到目前为止,Numpy是解决这个问题最快的(快6倍),但如果我应该尝试其他优化,或者我做错了什么,我想要一些反馈。这个简单的代码基于一个更大的代码,该代码有许多这样的einsum调用,但没有显式的for循环。我正在检查这些加速器中的任何一个是否可以做得更好。在MacOSXYosemite上使用Python2.7.9完成计时,安装了来自Homebrew的gcc-5.3.0(--with-fortran--without-multilib)。也做了%
如果我在Python中有一个生成器函数,请说:defgen(x):foriinrange(x):yield(i**2)如何在Cython中声明输出数据类型为int?值得吗?谢谢。编辑:我在变更日志中读到关于正在实现的(异步)生成器的提及:http://cython.readthedocs.io/en/latest/src/changes.html?highlight=generators#id23但是没有关于如何使用它们的文档。是因为它们受支持,但将它们与Cython一起使用没有特别的优势,或者无法进行优化吗? 最佳答案 不,在Cy
在NumPy数组上迭代时,Numba似乎比Cython快得多。我可能缺少哪些Cython优化?这是一个简单的例子:纯Python代码:importnumpyasnpdeff(arr):res=np.zeros(len(arr))foriinrange(len(arr)):res[i]=(arr[i])**2returnresarr=np.random.rand(10000)%timeitf(arr)输出:每个循环4.81毫秒±72.2微秒(7次运行的平均值±标准偏差,每次100次循环)Cython代码(在Jupyter中):%load_extcython%%cythonimportnu
按照建议here,我已经成功安装MicrosoftVisualC++CompilerforPython2.7编译一些Cython代码,但是:fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("module1.pyx"))仍然产生:error:Unabletofindvcvarsall.bat如何使用Python2.7编译Cython代码(例如在Windows7x64上)?注意:我已经仔细阅读了问题error:Unabletofindvcvarsall.bat但主
我正在使用Cython从Python模块中生成一个共享对象。编译输出写入build/lib.linux-x86_64-3.5//.cpython-35m-x86_64-linux-gnu.so.是否有更改命名规则的选项?我希望将文件命名为.so没有解释器版本或arch附录。 最佳答案 似乎setuptools没有提供更改或完全删除后缀的选项。魔法发生在distutils/command/build_ext.py中:defget_ext_filename(self,ext_name):fromdistutils.sysconfigim
关于cython中的内存View,如果我正在使用numpyfloat数组?然后我应该以同样的方式输入cdef吗?g.ctypedefnp.float64_tnp_float_t...@cython.profile(False)@cython.wraparound(False)@cython.boundscheck(False)cdefnp_float_tmean_1d(np_float_t[:]v)nogil:cdefunsignedintn=v.shape[0]cdefnp_float_tn_sum=0.cdefPy_ssize_tiforiinrange(n):n_sum+=v[i
如果它应该能够处理float和double,那么在cython中声明numpy数组的最佳方法是什么?我想内存View是不可能的,因为数据类型是至关重要的,但是对于ndarray有什么方法可以给它一个通用的float类型,它仍然会受益于cython的快速性?所以这是我通常会做的:defF(np.ndarrayA):A+=10我看到还有:defF(np.ndarray[np.float32_t,ndim=2]A):A+=10但这又会为该类型提供一个位大小。我还考虑过根据位大小(32或64)在函数内部创建内存View。任何想法都受到高度赞赏非常感谢您提供有关floating类型的提示。我试过
我正在尝试编译这种代码:defmy_func(doublec,intm):cdefdoublef[m][m]f=[[cforxinrange(m)]foryinrange(m)]...引发:ErrorcompilingCythonfile:------------------------------------------------------------defgrow(doublealpha,doublebeta,doublegamma,intm,ints):cdefdoublef[m][m]^--------------------------------------------
我必须保存和加载一个cython类实例。我的cython类是这个加上几个方法:importnumpyasnpcimportnumpyasnpcimportcythoncdefclassPerceptron_avg_my:cdefintwlen,freePoscdefnp.ndarrayw,wtot,wac,wtotc#np.ndarray[np.int32_t]cdefnp.ndarraywmean#np.ndarray[np.float32_t]cdefpublicdictfposdef__cinit__(self,np.int64_twlen=4*10**7):self.fpos=
所以我尝试使用line_profiler在我自己的python脚本中分析一个函数,因为我想要逐行计时。唯一的问题是该函数是Cython函数,并且line_profiler无法正常工作。在第一次运行时,它只是因错误而崩溃。然后我添加了!pythoncython:profile=Truecython:linetrace=Truecython:binding=True在我的脚本的顶部,现在它运行正常,除了时间和统计数据是空白的!有没有办法将line_profiler与Cythonized函数一起使用?我可以分析非Cythonized函数,但它比Cythonized慢得多,以至于我无法使用来自