如何在 numba jitclass python 中传递 class 中的字符串类型?
How can I pass string type in class in numba jitclass python?
虽然我在我的 class 之前添加了这个,但我注意到我将一个字符串传递给了我的 class 当我忽略声明它时 jitclass
无法工作并且当我尝试使用相同类型的字符串不能使用它。
spec = [
('filename', str),
('rows', int32),
('cls', int32),
('L', int32),
('H', int32),
('checking', int32[:]),
('enum_file', int32[:]),
('step', int32),
('slices', int32),
]
@jitclass(规范)
TypeError:规范值应该是 Numba 类型实例,得到 <class 'str'>
..................................................... .....................
这个怎么样?它有点难看,但可能是一个足够好的解决方法:
import numba as nb
spec = [
('filename', nb.uint8[:]),
('rows', nb.int32),
('cls', nb.int32),
('L', nb.int32),
('H', nb.int32),
('checking', nb.int32[:]),
('enum_file', nb.int32[:]),
('step', nb.int32),
('slices', nb.int32),
]
@nb.jitclass(spec)
class A:
def __init__(self, fname):
self.filename = fname
然后:
a = A(np.frombuffer(b'abcdef', dtype='uint8'))
print(a.filename.tostring())
您将无法在 nopython
jitted 函数中使用 tostring()
,但如果您只是在 numba 之外使用它,它就可以工作。
虽然我在我的 class 之前添加了这个,但我注意到我将一个字符串传递给了我的 class 当我忽略声明它时 jitclass
无法工作并且当我尝试使用相同类型的字符串不能使用它。
spec = [
('filename', str),
('rows', int32),
('cls', int32),
('L', int32),
('H', int32),
('checking', int32[:]),
('enum_file', int32[:]),
('step', int32),
('slices', int32),
]
@jitclass(规范)
TypeError:规范值应该是 Numba 类型实例,得到 <class 'str'>
..................................................... .....................
这个怎么样?它有点难看,但可能是一个足够好的解决方法:
import numba as nb
spec = [
('filename', nb.uint8[:]),
('rows', nb.int32),
('cls', nb.int32),
('L', nb.int32),
('H', nb.int32),
('checking', nb.int32[:]),
('enum_file', nb.int32[:]),
('step', nb.int32),
('slices', nb.int32),
]
@nb.jitclass(spec)
class A:
def __init__(self, fname):
self.filename = fname
然后:
a = A(np.frombuffer(b'abcdef', dtype='uint8'))
print(a.filename.tostring())
您将无法在 nopython
jitted 函数中使用 tostring()
,但如果您只是在 numba 之外使用它,它就可以工作。