cython加速对比

使用了cython加速

# do the primes, with the cython
def primes_cdef(int nb_primes):
    cdef int n,i,len_p #进行了底层变量定义
    cdef int p[100] #数组初始化
    if nb_primes>1000:
        nb_primes=1000
    len_p=0
    n=2
    while len_p <nb_primes:
        for i in p[:len_p]:
            if n% i==0:
                break
        else:
            p[len_p]=n
            len_p+=1
        n+=1
    result_as_list =[prime for prime in p[:len_p]]
    return result_as_list

没用使用的cython的加速

可以看到cdef来定义变量

import numpy as np
def primes(n_primes):
    p=np.empty(1000)  ''' 使用numpy进行array初始化'''
    if n_primes>1000:
        n_primes=1000
    len_p=0
    n=2
    while len_p<n_primes:
        for i in p[:len_p]:
            if n% i==0:
                break
        else:
            p[len_p]=0
            len_p+=1
        n+=1
    result_as_list=[prime for prime in p[:len_p]]
    return result_as_list

黄色加粗部分就是Python与C的交互部分,颜色越深,交互程度越多,由此可见 cython进行加速的部分为中间循环与迭代, 没有使用cytyhon的部分 发现,python参与的部分更多
通过命令来看到python与C的交互
#运行速度对比
在这里插入图片描述

加速对比:

速度cython非cython
1.96 usec/loop160 usec/loop

代码&指令参考

from distutils.core import setup
from Cython.Build import cythonize
import time
import pyximport

setup(name='Hello app',ext_modules=cythonize('hello.pyx',annotate=True))

指令

$ python exampleC.py build_ext --inplace
$ python3 -m timeit -s "import hello " "hello.primes_cdef(30)"

P.S.

cdef 定义函数时不可直接调用 需要在def之下 进行二调 不然变异会出错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值