Python NumPy的Numba给定错误

Python NumPy的Numba给定错误,python,python-3.x,numpy,list-comprehension,numba,Python,Python 3.x,Numpy,List Comprehension,Numba,看了a之后,我的理解是,如果使用NumPy工具来完成,那么可以使用Numba来完成(很有可能会加快速度) 然而,当我尝试麻木一些代码时,看起来简单的JIT(1)在列表理解方面没有问题,但(2)无法理解numpy.asarray() 当我跑的时候 import numba @numba.jit def squareTest(xlist): y = [x**2 for x in xlist] return y 它运行良好。但是当我跑的时候 import numba import n

看了a之后,我的理解是,如果使用NumPy工具来完成,那么可以使用Numba来完成(很有可能会加快速度)

然而,当我尝试麻木一些代码时,看起来简单的JIT(1)在列表理解方面没有问题,但(2)无法理解
numpy.asarray()

当我跑的时候

import numba
@numba.jit
def squareTest(xlist):
    y = [x**2 for x in xlist]
    return y
它运行良好。但是当我跑的时候

import numba
import numpy as np
@numba.jit
def squareTest(xlist):
    y = [x**2 for x in xlist]
    y1 = np.asarray(y)
    return y1
IPython控制台给了我一个很长的回溯,说有一个下降错误,最后以

def squareTest(xlist):
    y = [x**2 for x in xlist]`  
    ^
我不知道Numba模块的结构,但最后一部分告诉我,当它之后要将生成的列表转换为NumPy数组时,它就很难理解列表

我查过了

@numba.jit
def squareTest(xlist):
    y = list(range(20))
    y1 = np.asarray(y)
    return y1
它运行起来没有任何问题,因此看起来它可以处理列表理解或
np.asarray()
,但不能同时处理两者

我的第一个猜测是
njit
模式可以处理NumPy中的所有内容,而通过将
n
添加到
jit
来关闭的模式就是处理列表理解的方式。但是不是,第一个代码示例在更改为
njit
时仍然有效


这里的问题是什么,我如何能使涉及到麻木数组操作的函数最为繁琐地用列表理解来实现?

很有可能,当Numba JIT代码时,它会更改操作顺序,甚至组合操作,因此,即使它可以对列表进行列表理解,也可以将列表转换为NumPy数组,但不能同时执行这两项操作


你需要用一个非pythonic的命令序列来代替列表理解命令来做同样的事情。

鼓舞人心的说话者很棒,但是如果你想了解一些实际知识,那么就从这开始,说明什么是有效的,什么时候起作用。大纲:如果你的任务有一个NumPy解决方案,就使用它;为NumPy无法矢量化的迭代计算保留Numba便利。请看这里@user6655984是的,矢量化可以更好地完成这一特定的事情,但我也将它用作我想尝试的其他东西的微型版本。因此,这与其说是优化代码,不如说是让它工作。