Numba Неправильное использование BoundFunction на np.astype - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь скомпилировать функцию, которая выполняет некоторые вычисления для патча изображения, используя numba. Вот часть кода:

@jit(nopython=True, parallel=True)
def value_at_patch(img, coords, imgsize, patch_radius):
    x_center = coords[0]; y_center = coords[1];
    r = patch_radius
    s = 2*r+1
    xvec = np.arange(x_center-r, x_center+r+1)
    xvec[xvec <= 0] = 0 #prevent negative index
    xvec = xvec.astype(int)
    yvec = np.arange(y_center-r, y_center+r+1)
    yvec[yvec <= 0] = 0
    yvec = yvec.astype(int)
    A = np.zeros((s,s))

    #do some parallel computation on A

    p = np.any(A)
    return p

Я могу скомпилировать функцию, но когда я ее запускаю, я получаю следующее сообщение об ошибке:

Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of BoundFunction(array.astype for array(float64, 1d, C)) with parameters (Function(<class 'int'>))
 * parameterized
[1] During: resolving callee type: BoundFunction(array.astype for array(float64, 1d, C))
[2] During: typing of call at <ipython-input-17-90e27ac302a8> (42)


File "<ipython-input-17-90e27ac302a8>", line 42:
def value_at_patch(img, coords, imgsize, patch_radius):
    <source elided>
    xvec[xvec <= 0] = 0 #prevent negative index
    xvec = xvec.astype(int)
    ^

Я проверилДокументация numba и np.astype должны поддерживаться только одним аргументом. Знаете ли вы, что может быть причиной проблемы?

1 Ответ

0 голосов
/ 05 ноября 2019

Используйте np.int64 вместо int в следующих местах:

xvec = xvec.astype(np.int64)

yvec = yvec.astype(np.int64)
...