2015-11-09 11 views
0

У меня есть эти данные:Сглаживание данных в Python

8.7530482 1.34E-01 
8.7584016 2.68E-01 
8.7637563 6.70E-01 
8.769111 1.47E+00 
8.7744644 2.15E+00 
8.7798191 3.08E+00 
... 
11.5693578 6.36E+01 
11.5747125 6.21E+01 
11.5800659 6.17E+01 
11.5854193 6.14E+01 
11.590774 6.14E+01 
11.5961287 6.15E+01 
11.6014821 6.45E+01 

Проблема заключается в том, что мне нужно область данных, чтобы выглядеть следующим образом:

8.75 
8.76 
8.77 
8.78 
8.79 
... 
11.57 
11.58 
11.59 
11.60 
11.61 

При сохранении значений диапазона в соответствии с исходные данные. Поэтому мне нужно разумно усреднить данные для получения домена регулярного интервала.

Я пытаюсь использовать python для этого.

Любая помощь была бы принята с благодарностью.

+0

какой формат ваши данные? это панда 'DataFrame'? – Nhor

+0

только файл .txt, вкладка разделена –

ответ

0

Похоже, вы хотите линейно интерполировать свои данные. Для этого используйте scipy's interp1d.

Вот демо:

import numpy as np 
from scipy.interpolate import interp1d 

data = """ 
11.5693578 6.36E+01 
11.5747125 6.21E+01 
11.5800659 6.17E+01 
11.5854193 6.14E+01 
11.590774 6.14E+01 
11.5961287 6.15E+01 
11.6014821 6.45E+01 
""" 
data = np.fromstring(data, sep=' ') 
data = data.reshape((-1, 2)) 

x, y = data.T 
f = interp1d(x, y) 

Теперь мы можем использовать f, чтобы получить значения интерполяции на регулярной области:

regular_x = np.arange(11.57, np.max(x), .01) 

plt.plot(x, y, marker='o') 
plt.plot(regular_x, f(regular_x), marker='o') 

plt.legend(['Original', 'Interpolated'], loc='best') 
plt.ylim([61, 65]) 

enter image description here