【发布时间】:2015-06-12 10:30:46
【问题描述】:
我对使用numba 比较陌生,我想用它来使我的数组计算尽可能高效。有问题的函数是 numba 文档中几个概念的组合。
我在 Scipy 库中使用单一函数
scipy.special.eval_laguerre(n, x, out=None) = <ufunc 'eval_laguerre'>
在点 n 处计算拉盖尔多项式 L_n(x)。
问题 1: Numba 文档清楚地说明了如何使用装饰器 @vectorize 来优化用户编写的 ufunc。 http://numba.pydata.org/numba-doc/0.12/ufuncs.html#generalized-ufuncs
是否有标准程序可以使用 python 库提供的 ufunc 执行此操作?
问题 2:我想为矩阵的每个条目评估 L_n(x),对于数组中的 n 个值的数组。然后我必须使用以下表达式对这些值求和:
result = np.sum( [eval_laguerre(n, matrix) for n in array], axis=0)
我用过import numpy as np的地方。
如果我要使用广播,我会改为评估:
result = np.sum( eval_laguerre( array[:, None, None], matrix ), axis=0)
axis=0 表示要求和的维度。
我想使用'@jit' 来编译这个部分,但我不确定'numpy.sum() 的过程是什么。目前,上面带有@jit 表达式的表达式给出了语法错误。
result = np.sum( eval_laguerre( array[:, None, None], matrix ), axis=0)
^
SyntaxError: invalid syntax
@jit和np.sum()的正确使用方法是什么?
编辑:回应@hpaulj:
我的想法是numba 可以优化for循环,即
for n in array:
eval_laguerre(n, matrix)
这可能吗?如果不是numba,那是什么? Pythran?
【问题讨论】:
-
numba的大多数(如果不是全部)示例不都涉及 Python for 循环吗?它可以翻译和编译您的 OWN 代码。它对现有的 Python 和 numpy 函数没有任何作用,尤其是已经用 C 编写的函数。eval_laguerre和sum已经编译;没有 Python 代码可供 numba 重写。 -
@hpaulj 请看我上面的编辑。谢谢。