Numpy 在python函数执行过程中出现jit未知错误

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_

我做了这个函数,但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_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)
。谢谢,它工作正常!谢谢帮助!如果您满意,请将答案标记为已接受。谢谢。