【发布时间】:2018-06-26 22:49:47
【问题描述】:
看了一个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 涉及对数组执行 NumPy 数组操作的函数?
【问题讨论】:
-
励志演讲者很棒,但如果您想了解一些实际知识,请从 numpy+numba questions 开始,它会显示什么有效以及何时有效。大纲:如果您的任务有 NumPy 解决方案,请使用它;让 Numba 方便地进行 NumPy 无法矢量化的迭代计算。
-
@user6655984 是的,这个特定的事情可以通过矢量化做得更好,但我将它用作我想尝试
@jit的其他东西的微型版本。所以这与其说是优化代码,不如说是让它工作。
标签: python python-3.x numpy list-comprehension numba