如何在 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 之外使用它,它就可以工作。