# 不带函数签名的 @jit 装饰器 @jit(nopython=True) # nopython 模式可以实现最佳性能 defsum_of_sqrts(n): total = 0.0 for i inrange(n): total += np.sqrt(i) return total
# 测试函数 n = 10000000 print("Sum of square roots:", sum_of_sqrts(n))
提供函数签名
如果你想为函数提供签名,可以像下面这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13
from numba import jit, float64, int32
# 带有函数签名的 @jit 装饰器 @jit(float64(int32), nopython=True, cache=True) defsum_of_sqrts_with_signature(n): total = 0.0 for i inrange(n): total += np.sqrt(i) return total
# 测试带有签名的函数 n = 10000000 print("Sum of square roots with signature:", sum_of_sqrts_with_signature(n))
from time import time from numba import jit from random import uniform defbubble_sort(arr): n = len(arr) # 遍历所有数组元素 for i inrange(n): # 标记是否发生了交换 swapped = False # 最后i个元素已经是排好序的 for j inrange(0, n-i-1): # 交换如果元素找到的顺序是错误的 if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True # 如果没有发生交换,说明数组已经排好序了 ifnot swapped: break return arr
@jit defbubble_sort_numba(arr): n = len(arr) # 遍历所有数组元素 for i inrange(n): # 标记是否发生了交换 swapped = False # 最后i个元素已经是排好序的 for j inrange(0, n-i-1): # 交换如果元素找到的顺序是错误的 if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True # 如果没有发生交换,说明数组已经排好序了 ifnot swapped: break return arr
if __name__=="__main__": length=10000
numbers1=[uniform(-2*length,2*length) for i inrange(length)] numbers2=numbers1.copy()