我正在尝试numba来优化一些代码.我已经完成了0.26.0用户指南(http://numba.pydata.org/numba-doc/0.26.0/user/jit.html)第1.3.1节中的初始示例并获得了预期的结果,所以我不认为问题是安装.
这是我的代码:
import numba
import numpy
import random
a = 8
b = 4
def my_function(a, b):
all_values = numpy.fromiter(range(a), dtype = int)
my_array = []
for n in (range(a)):
some_values = (all_values[all_values != n]).tolist()
c = random.sample(some_values, b)
my_array.append(sorted([n] + c))
return my_array
print(my_function(a, b))
my_function_numba = numba.jit()(my_function)
print(my_function_numba(a, b))
Run Code Online (Sandbox Code Playgroud)
从my_function调用打印出预期结果后,返回以下错误消息:
ValueError Traceback (most recent call last)
<ipython-input-8-b5d8983a58f6> in <module>()
19 my_function_numba = numba.jit()(my_function)
20
---> 21 print(my_function_numba(a, b))
ValueError: cannot compute fingerprint of empty list
Run Code Online (Sandbox Code Playgroud)
空列表的指纹?
我不太确定这个错误,但一般来说,要快,numba需要 numpy/python 的特定子集(有关更多信息,请参阅此处和此处)。所以我可能会这样重写。
@numba.jit(nopython=True)
def fast_my_function(a, b):
all_values = np.arange(a)
my_array = np.empty((a, b + 1), dtype=np.int32)
for n in range(a):
some = all_values[all_values != n]
c = np.empty(b + 1, dtype=np.int32)
c[1:] = np.random.choice(some, b)
c[0] = n
c.sort()
my_array[n, :] = c
return my_array
Run Code Online (Sandbox Code Playgroud)
主要注意事项:
for n in range(a)将转换为快速本机循环)nopython=True到装饰器使得如果我使用无法有效 JIT 的东西,numba 会抱怨。| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |