【发布时间】:2021-10-31 19:20:23
【问题描述】:
我刚开始使用 numba,我想根据本教程编译代码供以后使用: https://numba.pydata.org/numba-doc/dev/user/pycc.html
我在自己尝试某些功能时遇到问题。首先,它在网站上说您可以省略输出的类型以及当我尝试此功能时(与 webiste 相同,但输出没有 f8):
@cc.export('square', '(f8)')
def square(a):
return a ** 2
我得到:TypeError: invalid signature: '(f8)' (type: 'str') 评估为 'Float' 而不是 tuple 或 Signature
但我这样做没有问题(去掉具有 2 个不同输入的函数的输出类型):
@cc.export('multf', '(f8, f8)')
@cc.export('multi', '(i4, i4)')
def mult(a, b):
return a * b
第一个问题:我在这里做错了什么?
另外,我尝试自己运行一个函数,但在使用 numpy 数组时遇到了问题。我要编译的函数是:
@cc.export('VolumeTetrahedra', 'f8[:,:](f8[:], f8[:], f8[:], f8[:])')
def VolumeTetrahedra(a, b, c, d) :
return abs(1/6 * np.linalg.det(np.asarray([[a[0], b[0], c[0], d[0]],[a[1], b[1], c[1], d[1]],[a[2], b[2], c[2], d[2]],[1,1,1,1]])))
哪个使用 numpy 函数(我检查过,numba 网站说这些函数应该可以工作,除非我读错了)
我只是得到这个错误: AssertionError: 在 nopython 模式管道中失败(步骤:本机降低)
所以基本上,如果我理解正确,numba 会尝试在不使用 python 的情况下更快地执行,但它不能用这个函数执行此操作,所以它给了我一个错误,我只是找不到将数组引入的方法numba 没有出现这种类型的错误,有没有办法编译我的示例函数或可以执行相同操作的函数?
如果有人可以帮助我解决我的 numba 问题,我会很感激,
谢谢,坦杰
【问题讨论】:
标签: python numpy compilation numba