类、字符串和数字
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]
几天前,我 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]