Numba 为 NumPy 提供错误
Numba giving error for NumPy
看了SciPy talk on Numba后,我的理解是,如果用NumPy工具做,用Numba也能做(很有可能加速)。
然而,当我尝试使用 Numba-fying 一些代码时,看起来简单的 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-fy 函数,这些函数涉及对使用列表推导以 python 方式制作的数组进行 NumPy 数组操作?
Numba 有时可能能够处理列表推导式,但您链接的 "Numba - Tell Those C++ Bullies to Get Lost" 演讲中的演讲者指出,要发挥其潜力,您需要编写 JIT 代码一种非 pythonic 的方式。
很有可能Numba在JIT代码的时候,改变了操作的顺序,甚至合并了操作,这样虽然它可以对一个列表做一个列表推导,也可以转一个列表成一个 NumPy 数组,它不能同时做。
您需要将列表理解命令替换为非 pythonic 命令序列才能执行相同的操作。
看了SciPy talk on Numba后,我的理解是,如果用NumPy工具做,用Numba也能做(很有可能加速)。
然而,当我尝试使用 Numba-fying 一些代码时,看起来简单的 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-fy 函数,这些函数涉及对使用列表推导以 python 方式制作的数组进行 NumPy 数组操作?
Numba 有时可能能够处理列表推导式,但您链接的 "Numba - Tell Those C++ Bullies to Get Lost" 演讲中的演讲者指出,要发挥其潜力,您需要编写 JIT 代码一种非 pythonic 的方式。
很有可能Numba在JIT代码的时候,改变了操作的顺序,甚至合并了操作,这样虽然它可以对一个列表做一个列表推导,也可以转一个列表成一个 NumPy 数组,它不能同时做。
您需要将列表理解命令替换为非 pythonic 命令序列才能执行相同的操作。