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