是否不可能在使用@njit并行化的自定义python函数中调用内置函数(例如svd)



在尝试运行涉及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中官方支持的模块列表中(请参阅此处和那里的文档(。

但是,根据文档支持numpy.linalg.svd(并不是说它可能与scipy.linalg.svd不同(。这种支持是部分的;只有2个第一自变量";支持。这对你来说应该没问题。