1。优化函数(代数简化)

现代CPU的加法和乘法运算非常快。如有可能,应避免使用指数运算。在

示例

在这个例子中,我用一个简单的乘法代替了昂贵的求幂运算。这样的简化可以导致相当高的加速,但也可能改变结果。在

首先,您的实现(float64)没有任何签名,稍后我将在另一个简单的示例中对此进行处理。在#nb.jit(nopython=True) is a shortcut for @nb.njit()

@nb.njit()

def calc_func_opt_1(a, b, n):

res = np.empty(n, dtype=np.float64)

fact=b

res[0] = 0.

res[1] = a * res[0] + (1. - a) *1.

res[2] = a * res[1] + (1. - a) * fact

for i in range(3, n):

fact*=b

res[i] = a * res[i - 1] + (1. - a) * fact

return res

另外一个好主意是尽可能使用标量。在

^{pr2}$

计时%timeit a = calc_func(0.988, 0.9988, 5000)

222 µs ± 2.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit a = calc_func_opt_1(0.988, 0.9988, 5000)

22.7 µs ± 45.5 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit a = calc_func_opt_2(0.988, 0.9988, 5000)

15.3 µs ± 35.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

2。建议签名吗?在

在提前模式(AOT)中,签名是必需的,但在通常的JIT模式下则不需要。上面的例子不是SIMD-vectoriable。所以你不会看到一个可能不是最优的输入输出声明的正面或负面影响。

让我们看另一个例子。在#Numba is able to SIMD-vectorize this loop if

#a,b,res are contigous arrays

@nb.njit(fastmath=True)

def some_function_1(a,b):

res=np.empty_like(a)

for i in range(a.shape[0]):

res[i]=a[i]**2+b[i]**2

return res

@nb.njit("float64[:](float64[:],float64[:])",fastmath=True)

def some_function_2(a,b):

res=np.empty_like(a)

for i in range(a.shape[0]):

res[i]=a[i]**2+b[i]**2

return res

a=np.random.rand(10_000)

b=np.random.rand(10_000)

#Example for non contiguous input

#a=np.random.rand(10_000)[0::2]

#b=np.random.rand(10_000)[0::2]

%timeit res=some_function_1(a,b)

5.59 µs ± 36.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit res=some_function_2(a,b)

9.36 µs ± 47.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

为什么带有签名的版本较慢?

让我们仔细看看签名。在some_function_1.nopython_signatures

#[(array(float64, 1d, C), array(float64, 1d, C)) -> array(float64, 1d, C)]

some_function_2.nopython_signatures

#[(array(float64, 1d, A), array(float64, 1d, A)) -> array(float64, 1d, A)]

#this is equivivalent to

#"float64[::1](float64[::1],float64[::1])"

如果在编译时内存布局是未知的,通常不可能对算法进行SIMD矢量化。当然,您可以显式地声明C-contigous数组,但是对于非连续的输入,该函数将不再工作,这通常不是有意的。在

python jit_python中Numba jit警告的解释相关推荐

  1. numba.jit警告:Compilation is falling back to object mode WITH looplifting enabled because Function

    报错信息: Compilation is falling back to object mode WITH looplifting enabled because Function "tra ...

  2. Numba.jit警告:由于非精确类型pyobject而导致类型推断失败

    Numba.jit警告:由于非精确类型pyobject而导致类型推断失败 对于使用Python进行科学计算的开发人员,加速代码执行是一项永恒的挑战.虽然Python与其他编程语言相比具有易用性和灵活性 ...

  3. numba.jit警告:warnings.warn(errors.NumbaDeprecationWarning(msg, state.func_ir.loc))

    参考文章:numba.jit警告:failed type inference due to: non-precise type pyobject

  4. python numba.jit 警告:cannot determine Numba type of class 'numba.dispatcher.LiftedLoop'(加速代码)

    原代码 # -*- coding: utf-8 -*- """ @File : 191218_obstacle_detection_测试加空间过滤器和jit加速器.py ...

  5. numba.jit警告:failed type inference due to: non-precise type pyobject

    from numba import jit 代码报错: failed type inference due to: non-precise type pyobject 解决方法: 把jit函数挪到类的 ...

  6. Python文件中头部的 #!(shebang) 基本解释

    #!是Linux中的符号,叫做Shebang或者Sha-bang Shebang通常在 Unix/Linux 系统脚本文件的第一行使用 用于指定执行该脚本的解释程序 使用步骤: 1.使用which查询 ...

  7. python numba库是什么,如何给python代码加速?JIT、autoit、LLVM

    参考文章1:一行代码让Python的运行速度提高100倍 参考文章2:[Python技巧]如何加快循环操作和Numpy数组运算速度 示例:遍历深度图的每个像素值是否为0,不用jit,要多耗时约500m ...

  8. php调用python pkl_Python中的Pickle操作(pkl文件解释)

    Python中的Pickle操作(pkl文件解释) 标签:#python##序列化# 时间:2019/03/11 16:43:55 作者:小木 作为数据科学家,您将以字典(dict).数据框(Data ...

  9. 用生动的例子花式解释:python类中一定需要有 __init__方法么?没有会怎样?

    python 类中一定需要有 __init __方法么?没有的会怎样? 在回答这个问题之前,先说两个问题: ① 面向对象编程? ② 什么是类? 面向对象,先上一个正式点的解释: "把一组数据 ...

最新文章

  1. bluez 设置绑定pin码_国家工信部重要提醒:一定要设置这个密码!
  2. 网卡清空缓存命令_九个常用的网络命令 ,很实用!
  3. 第四章 对象的类型和动态绑定
  4. 『Python』__getattr__()特殊方法
  5. 【Hibernate】Hibernate实体关系映射实例解析
  6. 邮件服务 php,PHP基础-邮件服务
  7. 如何查看windows xp系统的位数?
  8. Python3 抓取微信账单信息
  9. 掘地求生是什么游戏 把主播都逼疯的玩个锤子是什么游戏-李廷学
  10. 网易面试题,小易沉迷游戏
  11. CentOS8桌面图标不显示
  12. linux压缩一个tar.xz文件,Linux下解压tar.xz格式压缩文件
  13. windows核心编程之 C/C++运行库注意事项
  14. Python还原微信好友已撤回的微信消息
  15. 免费的 AI 动作捕捉工具 #Rokoko Video
  16. 【cookie】设置cookie过期时间 超时时间,Cookie 设置 expires
  17. PTA-C理论B类题库6-3使用函数求最大公约数(辗转相除法的实现)
  18. [乐意黎原创]车胎花纹类型 K193 和 K935 的比较
  19. blob类型url的视频下载问题
  20. 利用python爬虫技术获取每天每场的每位球员NBA数据以及每日范特西评分

热门文章

  1. 欠拟合与过拟合、泛化能力概念总结及python示例
  2. Cdr安装显示服务器出现,CorelDraw去掉出血位置打印 CDR双击编辑位图提示启动服务器应用程序失败 对象合并...
  3. P1496 火烧赤壁(离散化)
  4. Java注解的快捷键
  5. 四针手表指的是什么_六针手表怎么看?什么是六针手表
  6. 华硕ASUS,无线网络功能差解决方案
  7. php imagestring 字太小,PHP imagestring()函数使用方法
  8. 肝了一个月!这本 Java 开发手册出炉啦!
  9. 蓝桥杯:算法训练 印章 Python
  10. Cron表达式(七子表达式)