使用cython及使用cython封装的库函数的效率提升测试

1. 内容简介

  • get_angle.py:python编写代码,使用 python的math库。
  • get_angle_1.pyx:cython编写代码,使用python的math库。
  • get_angle_2.pyx:cython编写代码, 使用cython封装的math库。

1. 代码:

get_angle.py

import math
def get_angle(x,y):
    angle = 123
    if y == 0 : 
        if x < 0:
            angle = 180
        else:
            angle =  0
    if x == 0 :
        if y > 0:
            angle = 90
        else:
            angle =  270   
    else: 
        tan_yx = abs(y)/abs(x)
        if y > 0 and x < 0:
            angle = 180 - math.atan(tan_yx)*180/math.pi #90-180
        elif y > 0 and x > 0:
            angle =  math.atan(tan_yx)*180/math.pi #0-90
        elif y < 0 and x < 0:
            angle = 180 + math.atan(tan_yx)*180/math.pi #180-270
        elif y < 0 and x > 0:
            angle = 360- math.atan(tan_yx)*180/math.pi #270-360
    return angle

get_angle_1.py

cimport cython
import math

@cython.boundscheck(False)
@cython.wraparound(False)


cdef float _get_angle(float x, float y):
    cdef float angle
    cdef float tan_yx

    angle = 123
    if y == 0 :
        if x < 0:
            angle = 180
        else:
            angle =  0
    if x == 0 :
        if y > 0:
            angle = 90
        else:
            angle =  270   
    else: 
        tan_yx = abs(y)/abs(x)
        if y > 0 and x < 0:
            angle = 180 - math.atan(tan_yx)*180/math.pi #90-180
        elif y > 0 and x > 0:
            angle =  math.atan(tan_yx)*180/math.pi #0-90
        elif y < 0 and x < 0:
            angle = 180 + math.atan(tan_yx)*180/math.pi #180-270
        elif y < 0 and x > 0:
            angle = 360- math.atan(tan_yx)*180/math.pi #270-360
    return angle

def get_angle(x, y):
    return _get_angle(x, y)



get_angle_2.py

cimport cython
from libc.math cimport abs
from libc.math cimport atan

@cython.boundscheck(False)
@cython.wraparound(False)


cdef float _get_angle(float x, float y):
    cdef float angle
    cdef float tan_yx
    cdef float pi = 3.1415926535898

    angle = 123
    if y == 0 :
        if x < 0:
            angle = 180
        else:
            angle =  0
    if x == 0 :
        if y > 0:
            angle = 90
        else:
            angle =  270   
    else: 
        tan_yx = abs(y)/abs(x)
        if y > 0 and x < 0:
            angle = 180 - atan(tan_yx)*180/ pi #90-180
        elif y > 0 and x > 0:
            angle =  atan(tan_yx)*180/ pi #0-90
        elif y < 0 and x < 0:
            angle = 180 + atan(tan_yx)*180/pi #180-270
        elif y < 0 and x > 0:
            angle = 360- atan(tan_yx)*180/pi #270-360
    return angle

def get_angle(x, y):
    return _get_angle(x, y)


2. 运行速度对比:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值