我有两个简单且相似的函数。其中一个可以使用numba编译,而另一个则不行。我不明白它们之间的区别。以下是这两个函数:
第一个函数:
@nb.njit(float64[:](float64[:], float64[:]))
def arrAdd(a,b):
assert a.shape == b.shape
return a + b
编译成功。当我调用它时,
arrAdd(np.array([1,2.0,21]),np.array([2,3.0,1]))
它会返回:
array([ 3., 5., 22.])
第二个:
c = np.array([1,2.0,21])
@nb.njit
def arrAdd1(arr):
return arrAdd(arr,c)
然而,当我调用这个函数时:
arrAdd1([2,3.0,1])
它将会显示:
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of type(CPUDispatcher(<function arrAdd at 0x00000212A9FDC670>)) with parameters (array(float64, 1d, C), readonly array(float64, 1d, C))
Known signatures:
* (array(float64, 1d, A), array(float64, 1d, A)) -> array(float64, 1d, A)
During: resolving callee type: type(CPUDispatcher(<function arrAdd at 0x00000212A9FDC670>))
During: typing of call at <ipython-input-57-c77e552c5560> (4)
File "<ipython-input-57-c77e552c5560>", line 4:
def arrAdd1(arr):
return arrAdd(arr, c)
^
那么 array(float64, 1d, C) 和 array(float64, 1d, A) 有什么区别呢?