首页 > 其他分享 >Numba @jitclass:实践、踩雷注意事项

Numba @jitclass:实践、踩雷注意事项

时间:2024-06-08 17:31:57浏览次数:25  
标签:int32 self Numba 注意事项 np array class jitclass

@jitclass

允許定義類並進行 JIT 編譯。然而,在使用 jitclass 時,以下是一些重要的注意事項。
如果你也在numba jit debug地狱,希望这个对你有所帮助

注意事项

设定明确的spec

每个class中的var都需要设定,简言之就是使用self.xxx的都要

from numba import jit, int32, float64, boolean, int64
spec = [
    ('a', int32),
    ('b', int32),
    ('c', int32[:,:,:]),
    ('d', float64[:,:])
]
@jitclass(spec)
class foo:
	def __init():
		self.a = ...
		self.b = ...
		self.c = ...
		self.d = ...

避免重新分配 Numpy array

在处理 Numpy 数组时,避免在初始创建后重新分配数组。 Numba 的优化基于数据结构不改变形状的假设。

错误范例

# class开头声明
np_arr = np.array((2,3), )
# 后来操作
np_arr*= 0
np_arr= np.array(temp_HitsReport.shape)

尽量用for loop取代如找值清零

明确声明循环变量

在 Numba 中,必须在循环内明确声明循环变量。与标准 Python 不同,Numba 无法从其他作用域推断循环内声明的变量。

错误范例
以下范例,在python中可以成立的状况,但numba无法识别

# class开头
for i in range (10)
	print(i)
self.a = i 

在初始化之外不要运行 Numpy 数组操作

在 Numba 中,最好避免在初始化之外运行 Numpy 数组操作,这样可以避免一些潜在的问题。

错误范例

# 非初始化处执行这个操作
now_array = np.array(C2_lst[self.arr_trigger_condition[0][2] - 6].copy(), dtype=np.int32)

可行做法

# 使用复制方法
now_array = xxx.copy()

直接加载数据而非Call其他函数来加载

当加载数据时,应该在调用函数的地方直接加载,而不是通过其他类或函数进行转发。


总结

「直接一点」:哪边call function就哪边放变数,不要再丢到其他class function执行,减少Class的深度,这样读起来才不会报错。

标签:int32,self,Numba,注意事项,np,array,class,jitclass
From: https://blog.csdn.net/JTnnnnn/article/details/139512357

相关文章

  • C/C++ 联合体的注意事项
    联合体(Union)在C/C++中是一个特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。联合体的主要特点是,其所有的成员共享同一块内存区域,也就是说,联合体中的各个成员首地址都是相同的。这使得联合体在节省内存、进行数据类型转换等方面非常有用。然而,使用联合体时也需要注意......
  • C/C++ 枚举类型的注意事项
    枚举类型(enum)是C/C++的一种常用类型,它允许我们为一组整数值定义有意义的名称。然而,在使用枚举类型时,有几个重要的注意事项需要考虑:1.枚举的基础类型和值基础类型:默认情况下,枚举类型的基础类型是int,但你也可以明确指定其他整数类型(如enumclassColor:char{RED,GREEN,B......
  • python的datetime使用时区转换的注意事项
    由于做美股的开始,经常用到需要将utc时间转换成美东时间,或者美东时间转换为utc时间。美东时间涉及到一个夏令时,一个冬令时,不同的阶段与utc时间的时区相差不同的时间段 以前我一直用pytz的三方模块给datetime赋值时区信息,然后生成的对象用astimezone的方法,转换到对应的时区信息......
  • goto 语句以及 setjump、longjump 函数的注意事项总结
    关于goto、setjmp、longjmp的注意事项,总结如下:goto语句避免滥用:goto语句虽然能够提供一种直接的跳转方式,但过度使用会使程序结构变得复杂,难以阅读和维护。应优先考虑使用结构化的控制流语句(如if、while、for等)。防止死循环:在使用goto语句时,要特别注意不要形成死......
  • 光电二极管TIA电路设计注意事项
    1 光电二极管器件工作模式工作模式偏置优点缺点光伏模式零偏最精确的线性运算响应速度慢光导模式反向实现更高的开关速度1、降低线性度2、存在少量的电流(称为暗电流),它们甚至在没有光照度的情况下也会流动        可在运算放大器的同相......
  • SAR ADC驱动设计注意事项
    1SARADC特点      功耗低、小尺寸、高精度、速度适中以及采样延时短。2精密SARADC所需支持电路        模拟输入信号、ADC接口的前端、基准电压源和数字接口        前端由驱动放大器+RC滤波器组成,其中放大器:调节输入信号,同事充当信号和ADC......
  • STM32解决方案2:STM32程序中移植入其他模块注意事项
    Question在一个stm32大的开发程序中,如果要编写完之后移植入一个模块,如果要重新再编写整个程序显然很麻烦。为此,我们以stm32F103的一个程序为例,移植入LCD显示屏模块。(1)在对应的文件夹下导入LCD的文件。(2)在对应文件中添加该头文件(3)在此处加入LCD所在的目录(4)一定要记......
  • 研学活动注意事项十项,简单易懂!
    随着信息化教学的发展,学校在组织研学活动时越来越倾向于采用数字化工具来简化流程,提高效率。一些表单类工具过于繁琐,直到我发现易查分小程序这款工具,它不仅能够轻松制作研学活动的报名系统,还可以让家长在线签名,提交报名信息后自动获得报名号,整个报名过程变得简单而高效。研学......
  • 泛型的擦除问题和注意事项
    泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。一些常见的对象类型:Integer:  int的对象类型Double: double的对象类型建议不要用记事本直接打开class文件,有......
  • MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项
    一、背景概述在将数据库从MySQL5.7迁移到GreatSQL8.0.32时,由于数据量较小且关注安全性,决定使用mysqldump执行逻辑备份,并将数据导入GreatSQL。但在备份时采用了备份全库(--all-databases)的方式,在导入GreatSQL后,修改用户密码时出现错误。这是因为mysqldump备份时包括了mysql系统......