2016-09-08 4 views
0

Эта проблема действительно сводит меня с ума. У меня есть файл ascii с ~ 1 000 000 строк в нем. Есть 3 колонки X - координата, Z - глубина - V-скорость. Например:Python, интерполяция,

  X   Z    V 
     45000  -11657.8  5985.61 
     45000  -11578.22  5974.688 
     45000  -11259.92  5930.935 
    287800  -1034.451  2062.341 
    287800  -1014.557  2051.226 
    287800  -934.9814  2006.724 

мне нужно интерполировать глубины (Z) [- 15 000 до 0] со скоростью (V) с помощью шагов (для каждого 2000м или 100 м и т.д.) Например

 45000  -11657.8  5985.61 
     45000  -11600   ?????? 
     45000  -11578.22  5974.688 
     45000  -11500   ????? 
     45000  -111034.451  2062.341 
     287800  -934.9814  2006.724 
     287800  -900   ???? 
     287800  -895.1937  1984.451 

Что Я сделал:

import numpy as np 
from scipy.interpolate import interp1d 

with open('my data' ,'r') as f: 

header1 = f.readline() ###skip the first head line 
X_list=[] #### Create 3 empty lists 
Z_list=[] 
V_list=[] 
for line in f: 
    line = line.strip() 
    columns = line.split() 
    X = (float(columns[0])) ### separete columns and add to list and convert 
    Z = (float(columns[1])) ###to float 
    V = (float(columns[2])) 
    X_list.append(X) 
    Z_list.append(Z) 
    V_list.append(V) 
x = np.linspace(min(Z_list),max(Z_list),6) ## step 3000m = 6 parts 
print (x) 

результат:

[-15000. -12000. -9000. -6000. -3000. 0.]

Теперь я получил:

X    Z   V 

45000  -15000 ?????? 
45000  -12000 ?????? 
45000  -9000  ?????? 
45000  -6000  ?????? 
45000  -3000  ?????? 

Таким образом, вопрос. Как я мог интерполировать эту скорость на интересные глубины для каждой координат? Благодарим за любые советы

+0

Где вы на самом деле применяете 'interp1d' и что не так, точно? – Praveen

+0

Я не установил 'x' Я написал np.interp (X_list, x, V_list) –

ответ

1

Для того чтобы интерполировать, вам понадобится пример входов и выходов, которые будут основой интерполяции. В вашем случае Z_list - это вход и V_list, выход.

Далее вы можете использовать interp функцию от numpy, которые ожидают массив интерполировать x, а затем входной и выходной Z_listV_list. Давайте рассмотрим пример в its documentation.

import numpy as np 
print np.interp(x, Z_list, V_list) 
+0

Это действительно wokrs! Спасибо! Я попробовал это раньше, но вместо этого '' x '' я помещаю X_list - becouse, я думал, что первым параметром должна быть координата –

Смежные вопросы