Numba 无法编译一个简单的函数
Numba can not compile a simple function
我正在尝试编译一个简单的函数,它接受一个 python 列表,然后根据索引列表拆分它。我是 numba 的新手,文档对我没有帮助。
问题
我无法成功编译函数
要编译的代码
arr 变量是一个 python 浮点数或整数列表,idx 是一个 numpy 数组或 python 整数列表,结果应该是一个 2d python 浮点数或整数列表arr 输入
from numba.pycc import CC
cc = CC('trial')
# Uncomment the following line to print out the compilation steps
cc.verbose = True
@cc.export('split_numba', 'f8[:](f8[:], i4[:])')
def split_numba(arr, idx):
out = []
s = 0
for n in range(len(idx)):
e = idx[n]
out.append(arr[s:e])
s = e
return out
if __name__ == "__main__":
cc.compile()
错误
No conversion from list(array(float64, 1d, A))<iv=None> to array(float64, 1d, A) for 'return_value.1', defined at None
File "RUT_COMPILE.py", line 38:
def split_numba(arr, idx):
<source elided>
return out
^
During: typing of assignment at C:\Users\chelo\OneDrive\ALCANTARILLADO_PyQt5[=11=]_MODULOS\RUT_COMPILE.py (38)
File "RUT_COMPILE.py", line 38:
def split_numba(arr, idx):
<source elided>
return out
函数的输出类型不正确,因为 out
是一个 数组列表 。它应该是 'List(f8[:])(f8[:], i4[:])'
而不是 'f8[:](f8[:], i4[:])'
.
请注意,指定的输入是 而不是 Python 列表:f8[:]
引用具有 64 位浮点项的 Numpy 数组类型。 Numba 提供的 List
类型也不是 pure-Python 列表(在 Numba 文档中称为“反射列表”)。它是另一种类型化的列表类型(因此 Numba 需要将 pure-Python 列表转换为输入列表的类型化列表和输出列表的反向操作)。反射列表支持异构类型的项目。这样的操作引入了一个开销,如果计算量很小(这是你的情况),这个开销可能很大。
我正在尝试编译一个简单的函数,它接受一个 python 列表,然后根据索引列表拆分它。我是 numba 的新手,文档对我没有帮助。
问题 我无法成功编译函数
要编译的代码 arr 变量是一个 python 浮点数或整数列表,idx 是一个 numpy 数组或 python 整数列表,结果应该是一个 2d python 浮点数或整数列表arr 输入
from numba.pycc import CC
cc = CC('trial')
# Uncomment the following line to print out the compilation steps
cc.verbose = True
@cc.export('split_numba', 'f8[:](f8[:], i4[:])')
def split_numba(arr, idx):
out = []
s = 0
for n in range(len(idx)):
e = idx[n]
out.append(arr[s:e])
s = e
return out
if __name__ == "__main__":
cc.compile()
错误
No conversion from list(array(float64, 1d, A))<iv=None> to array(float64, 1d, A) for 'return_value.1', defined at None
File "RUT_COMPILE.py", line 38:
def split_numba(arr, idx):
<source elided>
return out
^
During: typing of assignment at C:\Users\chelo\OneDrive\ALCANTARILLADO_PyQt5[=11=]_MODULOS\RUT_COMPILE.py (38)
File "RUT_COMPILE.py", line 38:
def split_numba(arr, idx):
<source elided>
return out
函数的输出类型不正确,因为 out
是一个 数组列表 。它应该是 'List(f8[:])(f8[:], i4[:])'
而不是 'f8[:](f8[:], i4[:])'
.
请注意,指定的输入是 而不是 Python 列表:f8[:]
引用具有 64 位浮点项的 Numpy 数组类型。 Numba 提供的 List
类型也不是 pure-Python 列表(在 Numba 文档中称为“反射列表”)。它是另一种类型化的列表类型(因此 Numba 需要将 pure-Python 列表转换为输入列表的类型化列表和输出列表的反向操作)。反射列表支持异构类型的项目。这样的操作引入了一个开销,如果计算量很小(这是你的情况),这个开销可能很大。