Python3: интерполяция для определенных точек (не сетка) - PullRequest
1 голос
/ 20 апреля 2020

У меня есть текстовый файл (data.txt) в следующем формате (xyz):

Пример:

1.1 0.0 12
1.2 2.2 15
1.3 5.5 30
2.6 1.0 20
2.1 4.8 31
3.9 0.5 12
...

Я получаю эти данные со следующим кодом:

x,y,z = np.genfromtxt(r'data.txt', unpack=True)

Я хочу сделать интерполяцию, чтобы найти значение z определенного набора точек. Пример:

(1,0; 1,0), (1,9; 3,05), (1,4; 4,0), (2,2; 0,9), (2,4; 2,1), (2,9; 3,0), (3,0; 1,8)

Я создаю текстовый файл ("points.txt") с этими точками и загружаю их с

positions_path = np.loadtxt("points.txt")     #(x, y)

Это мой код для вычисления интерполяции:

intial_points = np.transpose(np.vstack((x, y)))   #array with the x and y points from data.txt



L1 = []  #empty list 

for i in range(len(positions_path)):


    n1=float(interpolate.griddata(intial_points, z, (positions_path[i,0], positions_path[i,1] ), method='linear'))   


    #L1 saves  x, y, z  
    L1.append([positions_path[i,0], positions_path[i,1], n1])

Это делает работу. Проблема в том, что это неосуществимо для большего количества баллов. Я в основном делаю интерполяцию для каждой точки. Если у меня будет 10000 очков, мне придется сделать это 10000 раз.

Я знаю, что могу создать определенную сетку и получить значения для дискретной сетки. Но что, если я получу значение для такой точки, как (0,001, 0,25)? Я должен был бы иметь очень тонкую сетку. Это причина, почему я избегаю сеток.

Есть ли способ выполнить интерполяцию для 1000 точек одновременно?

Спасибо!

1 Ответ

0 голосов
/ 20 апреля 2020

Решение довольно простое:


n1=interpolate.griddata(intial_points, z, (positions_path[:,0], positions_path[:,0] ), method='linear')

Возвращает массив со значениями "z" точек в points.txt. Нет необходимости в сетке. Спасибо!

...