Scipy interp2d для большого файла данных - PullRequest
0 голосов
/ 13 июня 2018

Редактировать с начала:

Я хочу интерполировать файл данных txt (на этот раз имеет три столбца x, y и z), используя interp2d.Форма файла (1756612, 3), а данные имеют вид, x, y, z =

[[  0.1569    0.1161   -0.0432 ]
[ -0.1063    0.2548    0.1365 ]
[  0.3046    0.07185   0.2372 ]
..., 
[ 12.03      0.279     2.227  ]
[  7.851     0.6597   -0.5134 ]
[ 22.68      0.1968    3.752  ]]

Моя цель - интерполировать на 2D-сетку, где оси - 1-й столбец, т.е.и 2-й и 3-й столбцы вместе, y и z.Последние два столбца связаны с помощью уравнения f = sqrt (y ^ 2 + z ^ 2), и я затем хочу построить это как тип графика pcolor.

Однако я получил следующую ошибку:

f = interp2d(x, y, Z, kind='linear')
File "/Users/Reem/anaconda/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 218, in __init__
"Invalid length for input z for non rectangular grid")
ValueError: Invalid length for input z for non rectangular grid

Как исправить это сообщение об ошибке?и как мне правильно включить x столбец?Я не смог понять это.Я с удовольствием предоставлю больше информации, если потребуется.

Мой код:

import numpy as np
from scipy.interpolate import interp2d
import matplotlib.pyplot as plt

# Get the data from the file
data = np.genfromtxt('data_pxpypz.txt')
#print(data.shape) 
#print(data)

xdata = data[:,0]  # 1st col data
ydata = data[:,1]  # 2nd col data 
zdata = data[:,2]  # 3rd col data


# # set the grid using minimum and maximum values of ydata and zdata
x = np.arange(-50, 36, 1) 
y = np.arange(-50, 36, 1)
X, Y = np.meshgrid(x, y)

# calculate the function from ydata and zdata
Z = np.sqrt(ydata**2+zdata**2)

# set the new grid as well as the interplating results
x2 = np.arange(-50, 36, 0.1)
y2 = np.arange(-50, 36, 0.1)
f = interp2d(x, y, Z, kind='linear')
Z2 = f(x2, y2)
# #
# # 

# plot the results

plt.pcolor(X, Y, Z)
X2, Y2 = np.meshgrid(x2, y2)
plt.pcolor(X2, Y2, Z2)

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...