使用numba要注意的越界问题
在Python中使用numba可以同时兼顾到C语言的速度以及python语言简便灵活。
但是要注意在numba修饰的函数中出现了数组越界的情况,有可能运行时不会报错,从而导致更加难以发现的错误。这是由于底层的C语言一直以来的一个“弊病”。
以下是一个简单的例子
import numpy as np
import numba@numba.jit
def sum1(a: np.ndarray):rlt = 0for i in range(a.shape[0]+1):rlt = rlt + a[i]return rltdef sum2(a: np.ndarray):rlt = 0for i in range(a.shape[0]+1):rlt = rlt + a[i]return rltarr = np.array([1,2,3,4])
print("sum1: ", sum1(arr))print("sum2: ", sum2(arr))
结果
sum1: 1278955642
IndexError Traceback (most recent call last)
in
21 print("sum1: ", sum1(arr))
22
—> 23 print("sum2: ", sum2(arr))
in sum2(a)
14 rlt = 0
15 for i in range(a.shape[0]+1):
—> 16 rlt = rlt + a[i]
17 return rlt
18
IndexError: index 4 is out of bounds for axis 0 with size 4
sum1和sum2除了是否numba修饰外,完全相同。可以看到sum1正常返回,但是返回了一个错的值; sum2由于是由纯python写的,运行时会进行各种检查,因此报错了
使用numba要注意的越界问题相关推荐
- 与人相处时不越界,能让关系更和谐
在这世上,我们每天都要与人相处:与人相处是一门学问,需要把握一个界限,当你过度的想要保持距离时,会让对方感觉你不近人情:而当你过度的亲密不拿自己当外人时,又可能是越界了. 每个人都有自己的朋友圈子和生 ...
- 适用于AMD ROC GPU的Numba概述
适用于AMD ROC GPU的Numba概述 Numba通过按照HSA执行模型将Python代码的受限子集直接编译到HSA内核和设备功能中,从而支持AMD ROC GPU编程.用Numba编写的内核似 ...
- 关于Numba的线程实现的说明
关于Numba的线程实现的说明 由Numbaparallel目标执行的工作由Numba线程层执行.实际上,"线程层"是Numba内置库,可以执行所需的并发执行.在撰写本文时,有三个 ...
- 适用于CUDA GPU的Numba 随机数生成
Numba实时变量分析 Numba使用引用计数进行垃圾回收,这是一种需要编译器配合的技术.Numba IR对必须插入decref的位置进行编码.这些位置通过实时变量分析确定.相应的源代码是https: ...
- 适用于CUDA GPU的Numba例子
• 适用于CUDA GPU的Numba例子 矩阵乘法 这是使用CUDA内核的矩阵乘法的简单实现: @cuda.jit def matmul(A, B, C): """Pe ...
- C++乘法的int越界问题
在做Leetcode 69. x 的平方根,出现了两种int越界的情况: 整数相乘越界 if(mid * mid <= x) 这样写的话,mid * mid可能越界,因此可以改为 if(mid ...
- Python可以调用Gpu吗_加快Python算法的四个方法:Numba篇
CDA数据分析师 出品 相信大家在做一些算法经常会被庞大的数据量所造成的超多计算量需要的时间而折磨的痛苦不已,接下来我们围绕四个方法来帮助大家加快一下Python的计算时间,减少大家在算法上的等待时间 ...
- valgrind-yyds——memcheck检查程序中的内存问题,如泄漏、越界、非法指针等。
Valgrind 用户手册 文章目录 1. valgrind概述 2. Valgrind 原理及安装 2.1 [Valgrind 做了什么](https://www.valgrind.org/docs ...
- java 数组越界异常_数组越界异常 求解决!!!
源自:4-3 滚动状态判断与处理 数组越界异常 求解决!!! package com.example.imooc; import java.io.BufferedInputStream; import ...
最新文章
- AI传教士和野人渡河问题-实验报告
- QT中利用Qlabel显示当前的时间:年-月-日-时-分-秒-星期
- java spring druid_Spring配置Druid连接池
- oracle备份和还原
- boost学习之boost::lock_guardT与boost::unique_lockT的区别
- vcenter6.7许可证企业版_本地的公司看过来,增值电信业务许可证如何办理!
- 学习Linux的途径。
- ORACLE数据库的备份和还原。
- JavaScript 图片切割效果(带拖放、缩放效果)
- java遍历文件夹并复制文件到指定目录
- “华为杯”山东理工大学第十一届ACM程序设计竞赛(正式赛)网络同步赛
- 解决Server2008下远程桌面连接“由于没有终端服务器许可证服务器可以提供许可证”
- 计算机窗口关闭不了怎么办,电脑上一直出现这个窗口关都关不掉怎么处理
- 1.13正版服务器,我的世界Minecraft梦幻世界服务器(1.7-1.13版本)
- MS8422/MS8413/MS8412/MS8416音频光纤同轴解码芯片样品技术支持
- 《隐忍的老虎司马懿》
- vue3缓存页面keep-alive+路由统一处理
- python--预测未来子女的身高、计算能量的消耗、为自己的手机充值、将指定的十进制数转换成二进制、八进制、十六进制
- MSSQL 数据库邮件配置
- c语言上机总结报告,C语言程序设计上机实践心得报告
热门文章
- 消息队列工具类(MSMQ)
- poj 2728(最小比率生成树)
- VC 在CStatic控件上绘图
- asp.net(c#) static关键字用法小结
- “Java引领技术人生”专题讲座北京、上海站圆满举行
- [转贴]年薪一万/十万/百万的各样生活
- Label中的自动换行
- Linux环境搭建 | 手把手教你配置Linux虚拟机
- R 中的哪些命令或者包让你相见恨晚?--转载知乎
- Atitit sql计划任务与查询优化器--统计信息模块