Numba для Scipy, в частности, CDDist - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь ускорить сравнение между двумя точечными облаками, у меня есть код, выполнение которого заняло около часа. Я вырезал это к этому и попытался осуществить numba. Код работает за исключением функции scipy cdist. Это мой первый тест использования нумбы, где я ошибаюсь?

from numba import jit

@jit(nopython=True)
def near_dist_top(T, B):
    xi = [i[0] for i in T]
    yi = [i[1] for i in T]
    zi = [i[2] for i in T]
    XB = B

    insert_params = []

    for i in range(len(T)):
        XA = [T[i]]
        disti = cdist(XA, XB, metric='euclidean').min()
        insert_params.append((xi[i], yi[i], zi[i], disti))
        # print("Top: " + str(i) + " of " + str(len(T)))
        print(i)
    return insert_params
    print(XB)

@@@ Edits @@@

И T, и B являются списками координат

(580992.507, 4275268.8321, 192.4599), (580992.507, 4275268.8391, 192.4209), (580992.507, 4275268.8391, 192.4209)

хммм, обрабатывает ли numba списки, должен ли он быть массивом numpy, будет ли cdist обрабатывать массив numpy ...?

Ошибка

numba.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'cdist': cannot determine Numba type of <class 'function'>

File "scratch_28.py", line 132:
def near_dist_top(T, B):
    <source elided>
        XA = [T[i]]
        disti = cdist(XA, XB, metric='euclidean').min()
        ^
...