#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
так, чтобы дальнейшие вычисления можно было выполнять без ошибок.