首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python numba指纹错误

python numba指纹错误
EN

Stack Overflow用户
提问于 2016-06-11 21:24:32
回答 1查看 4.4K关注 0票数 8

我在尝试numba优化一些代码。我已经研究了0.26.0用户指南(http://numba.pydata.org/numba-doc/0.26.0/user/jit.html)中1.3.1节中的初始示例,并获得了预期的结果,因此我认为问题不在于安装。

这是我的密码:

代码语言:javascript
复制
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))

输出my_function调用的预期结果后,将返回以下错误消息:

代码语言:javascript
复制
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

空名单的指纹?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-13 18:06:32

我不确定这个错误是什么,但一般来说,要想快速运行,numba需要numpy/python的一个特定子集(更多信息请参见这里这里 )。所以我可以这样改写它。

代码语言:javascript
复制
@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

要注意的主要事项:

  1. 没有名单,我准备好所有的东西。
  2. 不使用生成器(在python 2和3中,for n in range(a)将被转换为快速的本机循环)
  3. nopython=True添加到装潢师中,所以如果我使用一些不能有效地使用JITed的东西,numba会抱怨。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37768647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档