Python 数组作为numba中的函数参数
以下简单示例失败并出现错误: 独立模块:Python 数组作为numba中的函数参数,python,numba,Python,Numba,以下简单示例失败并出现错误: 独立模块: from numba.pycc import CC cc = CC('foo') @cc.export('product','float64(float64[:], float64[:])') def product(a, b): prod = 0 for i in range(a.size): prod += a[i] * b[i] return prod if __name__ == "__main__"
from numba.pycc import CC
cc = CC('foo')
@cc.export('product','float64(float64[:], float64[:])')
def product(a, b):
prod = 0
for i in range(a.size):
prod += a[i] * b[i]
return prod
if __name__ == "__main__":
cc.compile()
测试程序:
import numpy as np
import foo
x = np.array([2,3,1,0])
y = np.array([2,3,1,0])
print(foo.product(x,y))
失败,并显示错误消息:
Traceback (most recent call last):
File "\temp\test.py", line 7, in <module>
print(foo.product(x,y))
SystemError: exception RuntimeError<class 'BytesWarning'> not a BaseException subclass
回溯(最近一次呼叫最后一次):
文件“\temp\test.py”,第7行,在
印刷品(食品产品(x,y))
SystemError:exception RuntimeError不是BaseException子类
Windows上使用的版本是0.42.0和Python 3.7.2。
有什么提示吗?所以,我终于让您的代码正常工作了:
from numba.pycc import CC
cc = CC('foo')
cc.verbose = True
@cc.export('producti','int64(int64[:], int64[:])') #<--- Your data type was wrong
def product(a, b):
prod = 0
for i in range(a.size):
y = a[i] * b[i]
prod += y
return prod
if __name__ == "__main__":
cc.compile()
这里需要注意的几点:
- 按照创建
和x
数组的方式,默认情况下,数据类型设置为y
,因此当您将其键入int64
时,它被错误地转换float64
- 因此,简单地将您的类型固定到
就可以解决这个问题(或者您可以使用int64
作为速记)i8
- 链接到运行代码的google Colab笔记本:
import numpy as np
import foo
x = np.array([2, 3, 1, 0])
y = np.array([2, 3, 1, 0])
print(foo.producti(x, y)) # Output : 14