Numba莫名其妙的报错与解决逻辑(1)

Python开发很好,但性能在中期成为了瓶颈。Numba据说性能极佳,因此在试着一个最简单的KNN算法时,原作是《机器学习实战》,加上了Numba的JIT装饰器几乎是各种报错。

  • 函数式写法易报错
    例子代码是这样写的,在函数上加JIT是有问题的:
  •     maxCount = 0
        for key, value in classCount.items():
            if value > maxCount:
                maxCount = value
                maxIndex = key
        return maxIndex
    
  • 但稍微有一点点经验的Python程序员也可能会写成这个样子
  • maxIndex = max(classCount.items(), key=lambda x: x[0])[0]
    

    这样写有问题吗?没有,但Numba的JIT一样报错。

    3.解决第一个问题
    那么1到底是什么问题,写过静态语言的程序员应该知道,即使不用声明变量类型,至少也要声明一下变量吧,因此,例子代码明显没有声明maxIndex,于是我猜着加上了声明,初始化为None,像这样

        maxCount = 0
        maxIndex = None
        for key, value in classCount.items():
            if value > maxCount:
                maxCount = value
                maxIndex = key