类、字符串和数字

Classes, strings and numba

几天前,我 post 编辑 a question 关于 numba 和字符串的使用。有人好心地提出了一个解决方案——该解决方案有效,但产生的警告多于实际输出。重新审视我的 post,我意识到我让它变得比我应该的更复杂,并且在这样做时我隐藏了我猜想的实际问题。这次我会尽量做到简约。

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

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

Python 3.8.5,numba 0.53.0,Xubuntu 20.04-64。

感谢您的帮助。

传递 Python 列表是 deprecated. You should pass a 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]