2017-02-21 27 views
1

所以我沒有按照numba開發一段時間,我發現了很多令人興奮的事情,如@jitclass和列表支持。jitclass vs擴展API:可以在列表中使用什麼?

所以我想嘗試一下,但如果我嘗試在一個nopython塊我jitclass結構的名單,我得到的錯誤:

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 

而且最簡單的對應代碼:

@jit(nopython=True) 
def f(my_list): 
    return my_list 

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

但是,如果我遵循使用漫長的擴展API here,的示例,我不會有任何問題Interval的列表。

我以爲jitclass基本上是做擴展API的冗長例子的一種快速方式,我錯了嗎?如何在不必編寫這些容易出錯的綁定函數的情況下實現它?

回答

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>) 
+0

確實很好。謝謝! – Evariste