ジェネリックメトリックの相違行列を構築する必要があります。アルゴリズムを速く実行する必要があるので、私は 0.35をnopython
モードで使用しました。 ここに私のコードNumba jit nopythonモード:外部任意関数の署名をnumbaに伝える
import numpy as np
from numba import jit
from jellyfish import levenshtein_distance
def _dissimilarity_matrix(metric):
@jit(nopython=True)
def dm(data):
n = data.shape[0]
diss = np.zeros((n, n))
for i in range(n):
for j in range(i+1):
dist = metric(data[i], data[j])
diss[i, j] = dist
diss[j, i] = dist
return diss
return dm
@jit(nopython=True)
def euclidean_distance(vec1, vec2):
return np.sqrt(((vec1 - vec2)**2).sum())
test1 = np.random.randn(10, 2)
dissimilarity_matrix1 = _dissimilarity_matrix(euclidean_distance)
diss1 = dissimilarity_matrix1(test1)
test2 = np.array(["this", "is", "a", "test"])
dissimilarity_matrix2 = _dissimilarity_matrix(levenshtein_distance)
diss2 = dissimilarity_matrix2(test2)
ですが、出力は次のとおりです。機能levenshtein_distance
は、外部モジュール(ないから来ている間、機能euclidean_distance
は私によって定義され
numba.errors.TypingError: Failed at nopython (nopython frontend)
Untyped global name 'metric': cannot determine Numba type of <class 'builtin_function_or_method'>
File "test.py", line 12
注こととデコレータ@jit(nopython=True)
を持っています私によって書かれた)。 numba
に渡された関数の署名を明示的に伝える方法はありますか(すなわちmetric
:_dissimilarity_matrix
)? 私は本当に_dissimilarity_matrix
モードで実行し、入力として任意の関数を受け入れることが必要です。nopython
nopythonモードで任意のPython関数を呼び出すことはできません。これはnopythonモードの核となる機能です。Pythonはありません。 – user2357112
私は自分ですべての関数を定義して、それらを 'nopython'モードで動かすことはできませんが、方法はありませんか? –