2017-09-03 53 views
1

我正在使用numba 0.34.0和numpy 1.13.1。一個小例子被示出如下:爲什麼numba在numpy的linspace中引發一個類型錯誤

import numpy as np  
from numba import jit 
@jit(nopython=True) 
def initial(veh_size): 
    t = np.linspace(0, (100 - 1) * 30, 100, dtype=np.int32) 
    t0 = np.linspace(0, (veh_size - 1) * 30, veh_size, dtype=np.int32) 
    return t0 

initial(100) 

兩者符合tt0具有相同的錯誤消息。

錯誤消息:

numba.errors.InternalError: 
[1] During: resolving callee type: Function(<function linspace at 0x000001F977678C80>) 
[2] During: typing of call at ***/test1.py (6) 

回答

3

由於np.linspace的numba版本不接受任何dtype參數(source: numba 0.34 documentation):

2.7.3.3。其它功能

以下頂層功能被支持:

  • [...]

  • numpy.linspace()(僅3參數形式)

  • [... ]

您需要使用astype將其轉換nopython-numba函數中:

import numpy as np  
from numba import jit 
@jit(nopython=True) 
def initial(veh_size): 
    t = np.linspace(0, (100 - 1) * 30, 100).astype(np.int32) 
    t0 = np.linspace(0, (veh_size - 1) * 30, veh_size).astype(np.int32) 
    return t0 

initial(100) 

或者只是不nopython-numba函數使用np.linspace並把它作爲參數。這避免了一個臨時陣列,我懷疑Numbas np.linspace比NumPys更快。

+0

謝謝。對不起,我沒有檢查'numba',只是認爲它應該完全支持'linspace'。 – WZhao

+0

不客氣。我經常希望numbas例外是一個**位**更有幫助 - 但是如果遇到奇怪的TypingError(目前我已經爲支持的功能頁面添加了書籤),現在必須引用numba文檔。 :) – MSeifert

+0

@WZhao請不要忘記[接受](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案,如果它解決了你的問題。 – MSeifert

相關問題