2017-04-02 19 views
1

我是Numba的初學者。對於我的生活,我無法得到一個Numba函數來操縱一個簡單的列表。
哎呀,我甚至不知道如何指定簽名。Numba中Python列表的基本問題;這是怎麼回事?

下面是這個例子。怎麼了? (什麼是「反射清單」?)我該如何解決?

from numba import * 
from numba.types import * 

@jit(List(int64)(List(int64)), nopython=True) 
def foo(a): a[0] += a[0]; return a 

foo([1]) 

Traceback (most recent call last): 
    File "<pyshell#5>", in <module> 
    foo([1]) 
    File "numba\dispatcher.py", line 219, in _explain_matching_error 
    raise TypeError(msg) 
TypeError: No matching definition for argument type(s) reflected list(int64) 
+0

你指定一個簽名的任何特定原因? – user2357112

+0

@ user2357112:是的,我想了解如何在無法自動推斷的地方做到這一點。 – Mehrdad

+0

據我的Google技巧指出,「反射」列表是[在函數執行後在列表中可以看到(反映)JITted函數內部列表的更改](https://github.com/numba/numba /問題/ 1444)。由於我不知道的原因,這被視爲與常規列表不同的類型。你已經告訴Numba你的函數應該採用一個不反映的列表,但是它需要通過將'reflect = True'傳遞給內部'List'調用來獲得一個反射列表。它可能還需要返回一個反射列表。 – user2357112

回答

1

我還沒有發現任何關於這個問題的文件,而是來自來到了,當我Googled the topicdug through the source code,一個「反映」名單是一個東西的地方更改列表必須在JITted函數完成後在Python中可見(反映)。由於我不知道的原因,反映的列表被視爲與Numba類型系統中的未反映列表不同的類型。這個概念可能特定於nopython模式;我不確定,我無法測試它。

你已經聲明你的函數需要一個不反映的列表,但它需要一個反射列表。您需要將reflected=True添加到內部List(int64)調用中,並且可能還需要添加reflected=True