Ошибка экстраполяции Python

#python #interpolation

#python #интерполяция

Вопрос:

Я пытаюсь выполнить интерполяцию по 2D-данным, но продолжаю получать ошибку could not convert string to float: 'extrapolate' . Я почти уверен, что значение, для которого я получаю ошибку, не выходит за пределы интервала, который я использовал для интерполяции.

Я просто публикую свой конкретный пример, потому что для того, чтобы помочь мне с ошибкой, вам не нужно понимать определенную функцию, которую я использовал.

 from scipy.interpolate import interp2d
import numpy as np
import scipy.stats as si
import math as m

def C_prime_function(M,v):
    return si.norm.cdf(M/v   v/2) - m.exp(-M)*si.norm.cdf(M/v - v/2)
    
C_prime_function_vectorized = np.vectorize(C_prime_function)

x_coarse = np.arange(0.000001,5.5,0.5)
y_coarse = np.arange(-0.5,0.6,0.1)
v_coarse, M_coarse = np.meshgrid(x_coarse,y_coarse)
C_prime_true = C_prime_function_vectorized(M_coarse,v_coarse)

f = interp2d(v_coarse,M_coarse,C_prime_true,kind='linear',fill_value='extrapolate')

print(f(0.000001,0.5))
  

Поэтому я подумал fill_value = 'extrapolate' , что Python автоматически экстраполирует данные, которые находятся рядом / за пределами интервала. Но даже для fill_value = 'nan' (что, как я прочитал, должно привести к автоматической экстраполяции), это не работает.

Приветствую

Феликс

Ответ №1:

Попробуйте это вместо

 f = interp2d(v_coarse,M_coarse,C_prime_true,kind='linear',bounds_error = False)
  

затем ваш код печатает

 [0.39339549]
  

fill_value должно быть либо опущено, либо число, а не строка, согласно этому

И еще одна вещь — если вы хотите явно передать значение по умолчанию fill-value , это не fill_value = 'nan' но fill_value = None , что является способом передачи нулевых значений в Python (тогда 'nan' как это просто строка). Вам все еще нужно bounds_error = False , хотя

Комментарии:

1. Я бы посоветовал fill_value = np.nan , а не None так, чтобы дальнейшие вычисления можно было выполнять без ошибок.