jitclass vs extension API:可以在列表中使用什么?

时间:2017-02-21 10:34:40

标签: python numba

所以我暂时没有关注''的发展,我发现了许多令人兴奋的事情,比如numba和列表支持。

所以我想尝试一下,但是如果我尝试在@jitclass块中列出我的jitclass结构列表,我会收到错误:

nopython

使用简单的后续课程

reflected list(instance.jitclass.Interval#42f9788<lo:float64,hi:float64>): unsupported nested memory-managed object

最简单的相应代码:

@jitclass([('lo', types.float64), ('hi', types.float64)])
class Interval(object):
    def __init__(self, lo, hi):
        self.lo = lo
        self.hi = hi

    @property
    def width(self):
        return self.hi - self.lo

但是,如果我使用冗长的扩展API here的示例,我没有任何问题,并且列出了@jit(nopython=True) def f(my_list): return my_list f([Interval(1,2)]*10)

我认为jitclass基本上是一种快速的方式来做扩展API的冗长示例,我错了吗?如何在不必编写这些长错误的绑定函数的情况下实现它?

2 个答案:

答案 0 :(得分:2)

这并没有完全回答你的问题,但如果你想快速解决问题,我发现与列表不同,元组似乎有效:

f((Interval(1,2),)*10)

给出输出

(<numba.jitclass.boxing.Interval at 0x10d8d0d50>,
 <numba.jitclass.boxing.Interval at 0x10d8d0d70>,
 [... clipped ...]
 <numba.jitclass.boxing.Interval at 0x10d8d0e90>)

答案 1 :(得分:0)

这实际上是在Numba 0.39(http://numba.pydata.org/numba-doc/0.39.0/release-notes.html#version-0-39-0)中添加的

  

List获得了对包含引用计数类型(如NumPy数组和列表)的支持。请注意,列表仍然不能包含异构类型。

所以现在它可以直接起床了。