Numpy 在python函数执行过程中出现jit未知错误
我做了这个函数,但numba总是给我错误。chr_pos和pos都是一维阵列。有什么问题吗Numpy 在python函数执行过程中出现jit未知错误,numpy,numba,Numpy,Numba,我做了这个函数,但numba总是给我错误。chr_pos和pos都是一维阵列。有什么问题吗 @nb.njit def create_needed_pos(chr_pos, pos): needed_pos=[] needed_pos=np.array(needed_pos,dtype=np.float64) for i in range(len(chr_pos)): for k in range(len(pos)): if chr_
@nb.njit
def create_needed_pos(chr_pos, pos):
needed_pos=[]
needed_pos=np.array(needed_pos,dtype=np.float64)
for i in range(len(chr_pos)):
for k in range(len(pos)):
if chr_pos[i] == pos[k]:
if i==1 and k==1:
needed_pos=pos[k]
else:
a=pos[k]
needed_pos=np.append(needed_pos,[a])
return needed_pos
needed_pos=create_needed_pos(chr_pos, pos)
错误:
warnings.warn(errors.NumbaDeprecationWarning(msg,
<input>:1: NumbaWarning:
Compilation is falling back to object mode WITHOUT looplifting enabled because Function "create_needed_pos" failed type inference due to: Cannot unify array(float64, 1d, C) and int32 for 'needed_pos.1', defined at <input> (5)
File "<input>", line 5:
<source missing, REPL/exec in use?>
During: typing of intrinsic-call at <input> (9)
File "<input>", line 9:
<source missing, REPL/exec in use?>
warnings.warn(错误)numbadepreactionwarning(消息,
:1:麻木:
编译正在退回到对象模式,但未启用循环提升,因为函数“create_needed_pos”的类型推断失败,原因是:无法为(5)中定义的“needed_pos.1”统一数组(float64,1d,C)和int32
文件“”,第5行:
期间:在(9)处键入内部调用
文件“”,第9行:
消息
Cannot unify array(float64, 1d, C) and int32 for 'needed_pos.1'
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Cannot infer the type of variable 'needed_pos', have imprecise type: list(undefined)<iv=None>.
正在告诉您正在尝试将整数变量分配给数组。发生在此行:
needed_pos=pos[k]
在普通Python中可以这样做,但Numba需要静态类型。必须将浮点数组分配给浮点数组。例如,将行替换为
needed_pos = pos[k:k+1]
相同的错误消息表示您正在尝试分配一个int,这表示pos
接收一个int数组。您必须传递一个float数组
在这些变化之后,Numba仍然在这里抱怨:
needed_pos = []
needed_pos = np.array(needed_pos, dtype=np.float64)
带着信息
Cannot unify array(float64, 1d, C) and int32 for 'needed_pos.1'
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Cannot infer the type of variable 'needed_pos', have imprecise type: list(undefined)<iv=None>.
现在,该程序编译并产生相同的结果,无论是否使用Numba
但问题仍然存在。Numpy数组在具有固定大小时效果最好。如果要连续添加元素,最好使用列表(本例中为Numba列表)。例如:
@nb.njit
def create_needed_pos(chr_pos, pos):
needed_pos = nb.typed.List.empty_list(nb.float64)
for i in range(len(chr_pos)):
for k in range(len(pos)):
if chr_pos[i] == pos[k]:
if i == k == 1:
needed_pos = nb.typed.List([pos[k]])
else:
needed_pos.append(pos[k])
return needed_pos
谢谢您的快速回答。我试图运行您的函数,但出现了以下错误:“回溯(最近一次调用):文件“”,第2行,文件“C:\Users\User\PycharmProjects\pythonProject\venv\lib\site packages\numba\core\dispatcher.py”,第420行,在编译参数错误\u重写(e,“键入”)numba.core.errors.TypingError:在nopython模式管道中失败(步骤:nopython frontend)无法为“Required_pos.4”统一ListType[float64]和ListType[int32],定义在(10)“我的示例遵循原始示例中的类型。但是
无法统一ListType[float64]和ListType[int32]
表示您正在参数pos中传递int32数组。如果需要传递int32值,则必须将needed\u pos
声明为nb.typed.List.empty\u List(nb.int32)
。谢谢,它工作正常!谢谢帮助!如果您满意,请将答案标记为已接受。谢谢。