Numba 嵌套函数返回“无法修改只读数组”错误

问题描述 投票:0回答:0

我有这个功能:

@njit
def partial_1dproblem(var,var2,der_array): #First derivative
    y = var
    x = var2
    dydx = der_array
    if y.shape != dydx.shape:
        raise  ValueError('Dependent variable and derivative array have different shapes')
    vardim = var.ndim
    invalid_input = 0
    
    
    #Forward
    
    if vardim == 1:
                
        for i in range(len(dydx)-1):
            dydx[i] = (y[i+1] - y[i])/(x[i+1] - x[i])
            
        i = len(dydx) - 1
        dydx[i] =( (-1/(x[i-2]-x[i]) - 1/(x[i-1]-x[i]))        * y[i] 
                -(x[i-2]-x[i])/((x[i-1]-x[i-2])*(x[i-1]-x[i])) * y[i-1] 
                +(x[i-1]-x[i])/((x[i-1]-x[i-2])*(x[i-2]-x[i])) * y[i-2] )
                                   
    else:
        invalid_input = 1
                        
    if invalid_input == 1:
        raise ValueError('Invalid Input')                
    else:
        return dydx

计算输入的有限差分导数,该函数在单独调用时有效,但在另一个函数内部调用时返回错误

N_points = 10001
der_array_1dproblem = np.empty(N_points)

test_grid_1d = np.linspace(0,N_points-1,N_points)
test_variable_1d = 2*np.linspace(0,N_points-1,N_points)
partial_1dproblem(test_variable_1d,test_grid_1d,der_array_1dproblem)
array([2., 2., 2., ..., 2., 2., 2.])

@njit
def test():
    return partial_1dproblem(test_variable_1d,test_grid_1d,der_array_1dproblem)
test()
Rejected as the implementation raised a specific error:
         TypeError: Cannot modify value of type readonly array(float64, 1d, C)

我怎样才能让它发挥作用?我需要在另一个内部调用原始函数。我用其他一些简单的嵌套函数进行了测试并且它起作用了,但是这个有一些导致这个错误的东西。

python nested numba
© www.soinside.com 2019 - 2024. All rights reserved.