首页 > 解决方案 > 类、字符串和 numba

问题描述

几天前,我发布了一个关于 numba 和字符串使用的问题。有人好心地提出了一个解决方案——它有效,但产生的警告多于实际输出。重温我的帖子,我意识到我做的比我应该做的要复杂得多,这样做我隐藏了我猜的实际问题。这次我会尽量让它变得简约。

我正在尝试将字符串列表传递给_init_()并使其成为该类的属性。我已经尝试了无数次和方法。到目前为止,我得到的最佳方法如下:

from numba import types
from numba.experimental import jitclass

spec = [('S', types.ListType(types.unicode_type)), \
        ('Scopy', types.ListType(types.unicode_type))]

@jitclass(spec)
class Test(object):
    def __init__(self, S):
        #self.Scopy = S.copy()
        #print(self.Scopy)
        return print(S)

A = ["a", "b"]
Test(A)

上面的脚本产生一个输出行(如预期的那样)和(不夸张)十几个警告行。

当我取消注释的前两行时,问题就开始了,这两行__init__()创建列表的副本作为类属性并打印它。现在发生错误并且没有产生有效的输出。我想知道怎么了。我尝试了几种方法及其组合,但没有任何效果。我怀疑这.copy()是问题所在,因为如果我将前两行注释掉,脚本就可以工作(但是效果很差)。

Python 3.8.5,numba 0.53.0,Xubuntu 20.04-64。

谢谢你的帮助。

标签: python-3.xnumba

解决方案


不推荐传递 Python 列表。您应该改为传递typed.List

这段代码:

@nb.experimental.jitclass(spec)
class Test(object):

    def __init__(self, S):
        self.Scopy = S.copy()
        print(self.Scopy)
        print(S)

A = nb.typed.List(["a", "b"])
Test(A)

产生:

[a, b]
[a, b]

推荐阅读