是否无法调用内置函数,例如svd 在使用@njit 并行化的自定义 python 函数中?
Is it not possible to call the in-built function e.g. svd in a custom python function that is parallized using @njit?
尝试 运行 我的包含 svd 函数的 for 循环时出现以下错误
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'svd': cannot determine Numba type of <class 'function'>
代码如下。
from scipy.linalg import svd
import numpy as np
from numba import jit
PatchSize = 5
@jit(nopython=True)
def svd_solver(image):
Hight = image.shape[0]
Width = image.shape[1]
for i in range(PatchSize):
for j in range(PatchSize):
Count = Count+1
Patch = ImgInput[i:Hight-PatchSize+i+1,j:Width-PatchSize+j+1]
SG_S, SG_V, SG_D = svd(Patch)
return SG_V
在撰写本文时,Scipy 不在 Numba 官方支持的模块列表中(请参阅文档 here and there)。
但是,numpy.linalg.svd
是受支持的 according to the documentation(并不是说它可能与 scipy.linalg.svd
不同)。这种支持是部分的,因为“仅支持 2 个第一个参数”。这对你来说应该没问题。
尝试 运行 我的包含 svd 函数的 for 循环时出现以下错误
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'svd': cannot determine Numba type of <class 'function'>
代码如下。
from scipy.linalg import svd
import numpy as np
from numba import jit
PatchSize = 5
@jit(nopython=True)
def svd_solver(image):
Hight = image.shape[0]
Width = image.shape[1]
for i in range(PatchSize):
for j in range(PatchSize):
Count = Count+1
Patch = ImgInput[i:Hight-PatchSize+i+1,j:Width-PatchSize+j+1]
SG_S, SG_V, SG_D = svd(Patch)
return SG_V
在撰写本文时,Scipy 不在 Numba 官方支持的模块列表中(请参阅文档 here and there)。
但是,numpy.linalg.svd
是受支持的 according to the documentation(并不是说它可能与 scipy.linalg.svd
不同)。这种支持是部分的,因为“仅支持 2 个第一个参数”。这对你来说应该没问题。