使用numba要注意的越界问题
在Python中使用numba可以同時(shí)兼顧到C語(yǔ)言的速度以及python語(yǔ)言簡(jiǎn)便靈活。
但是要注意在numba修飾的函數(shù)中出現(xiàn)了數(shù)組越界的情況,有可能運(yùn)行時(shí)不會(huì)報(bào)錯(cuò),從而導(dǎo)致更加難以發(fā)現(xiàn)的錯(cuò)誤。這是由于底層的C語(yǔ)言一直以來(lái)的一個(gè)“弊病”。
以下是一個(gè)簡(jiǎn)單的例子
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))結(jié)果
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正常返回,但是返回了一個(gè)錯(cuò)的值; sum2由于是由純python寫(xiě)的,運(yùn)行時(shí)會(huì)進(jìn)行各種檢查,因此報(bào)錯(cuò)了
總結(jié)
以上是生活随笔為你收集整理的使用numba要注意的越界问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OpenGL坐标系转化之投影坐标系
- 下一篇: Introduction to 3D G