【发布时间】:2017-11-27 09:41:37
【问题描述】:
如何复制numba jitclass 实例(其变量为numpy 标量和数组)?
除了创建一个新实例并在循环中复制所有变量之外,还有更好的方法吗?我也试过copy.copy 和copy.deepcopy,但都失败了TypeError: can't pickle MyJitClassName objects
【问题讨论】:
标签: python copy jit deep-copy numba
如何复制numba jitclass 实例(其变量为numpy 标量和数组)?
除了创建一个新实例并在循环中复制所有变量之外,还有更好的方法吗?我也试过copy.copy 和copy.deepcopy,但都失败了TypeError: can't pickle MyJitClassName objects
【问题讨论】:
标签: python copy jit deep-copy numba
我想原则上这是 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())。正如你所说,这并不理想