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
    时,它被错误地转换
打印(x.dtype)

输出:数据类型('int64')

  • 因此,简单地将您的类型固定到
    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