【问题标题】:Numba - copy of a jitclass instanceNumba - jitclass 实例的副本
【发布时间】:2017-11-27 09:41:37
【问题描述】:

如何复制numba jitclass 实例(其变量为numpy 标量和数组)?

除了创建一个新实例并在循环中复制所有变量之外,还有更好的方法吗?我也试过copy.copycopy.deepcopy,但都失败了TypeError: can't pickle MyJitClassName objects

【问题讨论】:

    标签: python copy jit deep-copy numba


    【解决方案1】:

    我想原则上这是 numba 可以支持的东西(考虑打开一个 issue),但现在我认为唯一的选择是定义你自己的。

    请注意,jitclasses 包含对数组的引用,因此如果要复制底层数据,array.copy() 是必需的。

    from numba import jitclass, float64
    spec = [
        ('scalar', float64),
        ('array', float64[:]),
    ]
    
    @jitclass(spec)
    class MyJitClass:
        def __init__(self, scalar, array):
            self.scalar = scalar
            self.array = array
    
        def copy(self):
            return MyJitClass(self.scalar, self.array.copy())
    

    【讨论】:

    • 这就是我最终要做的,只初始化一个空的新实例并循环specs 中的所有变量并检查if isinstance(var, numba.types.npytypes.Array): setattr(new_instance, var, getattr(self, var).copy())。正如你所说,这并不理想
    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多