Редактировать с начала:
Я хочу интерполировать файл данных 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()