【问题标题】:Classes, strings and numba类、字符串和 numba
【发布时间】:2021-06-22 20:41:36
【问题描述】:

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

我正在尝试将字符串列表传递给_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.x numba


    【解决方案1】:

    传递 Python 列表是 deprecated。您应该改为传递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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2019-10-21
      • 1970-01-01
      • 2018-03-24
      • 2019-11-13
      • 1970-01-01
      • 2019-12-29
      相关资源
      最近更新 更多