Python 如何在jitclass中创建numpy数组列表
我想创建一个JIT类,它将存储一些numpy数组。我不知道到底有多少。所以我想创建一个numpy数组列表。 我对麻木类型感到困惑,但找到了一些奇怪的解决方案。 这是正常的Python 如何在jitclass中创建numpy数组列表,python,numpy,numba,Python,Numpy,Numba,我想创建一个JIT类,它将存储一些numpy数组。我不知道到底有多少。所以我想创建一个numpy数组列表。 我对麻木类型感到困惑,但找到了一些奇怪的解决方案。 这是正常的 import numba from numba import types, typed, typeof from numba.experimental import jitclass import numpy as np spec = [ ('test', typeof(typed.List.empty_list(
import numba
from numba import types, typed, typeof
from numba.experimental import jitclass
import numpy as np
spec = [
('test', typeof(typed.List.empty_list(numba.int64[:])))
]
@jitclass(spec)
class myLIST(object):
def __init__ (self, haha=typed.List.empty_list(numba.int64[:])):
self.test = haha
self.test.append(np.asarray([0]))
def dump(self):
self.test.append(np.asarray([1]))
print(self.test)
a = myLIST()
a.dump()
但当我删除冗余变量时,它失败了
spec = [
('test', typeof(typed.List.empty_list(numba.int64[:])))
]
@jitclass(spec)
class myLIST(object):
def __init__ (self):
self.test = typed.List.empty_list(numba.int64[:])
self.test.append(np.asarray([0]))
def dump(self):
self.test.append(np.asarray([1]))
print(self.test)
a = myLIST()
a.dump()
为什么会发生这种情况?似乎将数组类型声明为
nb.int64[:]
并不能提供足够的信息来创建类,除非您创建一个实例(Numba可以用来推断类型的haha
的默认值)
相反,您可以声明:
int_vector = nb.types.Array(dtype=nb.int64, ndim=1, layout="C")
spec = [('test', nb.typeof(nb.typed.List.empty_list(int_vector)))]
或更短:
int_vector = nb.types.Array(dtype=nb.int64, ndim=1, layout="C")
spec = [('test', nb.types.ListType(int_vector))]
或者,如果可以使用类型注释:
int_vector = nb.types.Array(dtype=nb.int64, ndim=1, layout="C")
@nb.experimental.jitclass
class my_list:
test: nb.types.ListType(int_vector)
def __init__(self):
self.test = nb.typed.List.empty_list(int_vector)
self.test.append(np.array([0]))
def dump(self):
self.test.append(np.array([1]))
print(self.test)
a = my_list()
a.dump()