metode ekstrapolasi scipy interp1d fill_value = tuple tidak berfungsi

Saya ingin mengekstrapolasi fungsi yang cocok. scipy.interpolate.interp1d seharusnya dapat melakukan ini (lihat cuplikan dokumen). Sebaliknya saya mendapatkan "ValueError: Nilai dalam x_new berada di bawah rentang interpolasi."

Menggunakan: python 2.7.12, numpy 1.13.3, scipy 0.19.1

fill_value : seperti array atau (seperti array, seperti_array) atau "ekstrapolasi", opsional - jika ndarray (atau float), nilai ini akan digunakan untuk mengisi titik yang diminta di luar rentang data. Jika tidak disediakan, maka defaultnya adalah NaN. Bentuk seperti array harus disiarkan dengan benar ke dimensi sumbu non-interpolasi. - Jika tuple dua elemen, maka elemen pertama digunakan sebagai nilai isian untuk x_new < x[0] dan elemen kedua digunakan untuk x_new > x[-1]. Apa pun yang bukan tupel 2 elemen (mis., list atau ndarray, apa pun bentuknya) dianggap sebagai argumen mirip array yang dimaksudkan untuk digunakan pada kedua batasan sebagai below, above = fill_value, fill_value.

import numpy as np
from scipy.interpolate import interp1d
# make a time series
nobs = 10
t = np.sort(np.random.random(nobs))
x = np.random.random(nobs)
# compute linear interp (with ability to extrapolate too)
f1 = interp1d(t, x, kind='linear', fill_value='extrapolate') # this works
f2 = interp1d(t, x, kind='linear', fill_value=(0.5, 0.6)) # this doesn't

person John Mahoney    schedule 21.10.2017    source sumber


Jawaban (1)


Menurut dokumentasi, interp1d defaultnya adalah menaikkan ValueError pada ekstrapolasi kecuali ketika fill_value='extrapolate' atau ketika Anda menentukan bounds_error=False.

In [1]: f1 = interp1d(t, x, kind='linear', fill_value=(0.5, 0.6), bounds_error=False)

In [2]: f1(0)
Out[2]: array(0.5)
person Craig    schedule 21.10.2017
comment
Terima kasih, Craig. Saya berasumsi bahwa memberikan nilai Tuple ke fill_value akan menyebabkannya digunakan (mungkin kecuali Anda juga secara eksplisit menetapkan batas_kesalahan=False karena alasan tertentu). Rupanya ini bukan perilaku interp1d. - person John Mahoney; 22.10.2017