使用scipy.interpolate.griddata时遇到错误。我的目标是使用matplotlib准备轮廓数据。我已经读过,执行此操作的最佳方法是在传递给griddata之前使用linspace将x任意y分隔为1D数组。
我的x和y值的最小值和最大值用于输入到linspace,以便保持坐标相同用于GIS映射目的(不确定是否有必要将数据点放在与网格坐标相同的xy区域,但我是这样做的任何方式)
文件Watertable CSV导入为具有x,y和z值的numpy数组。 z作为直数列索引提供给griddata。
我遇到了错误" valueError:输入数据点的无效形状"
我确信这是非常简单的事情,希望有人可以解释我的错误。
[编辑]
我已根据建议使用pastebin链接了csv文件:
import numpy as np
from scipy.interpolate import griddata
from numpy import genfromtxt
my_data = genfromtxt('WaterTable.csv', delimiter=',')
x = my_data[1:,0:1]
y = my_data[1:,1:2]
z = my_data[1:,2:3]
xmax = max(x)
xmin = min(x)
ymax = max(y)
ymin = min(y)
xi = np.linspace(xmin, xmax, 2000)
yi = np.linspace(ymin, ymax, 2000)
zi = griddata((x, y), z, (xi, yi), method='cubic')
我脚本然后退出并出现以下错误:
Traceback (most recent call last):
File "C:/Users/Hp/PycharmProjects/GISdev/Irregular_Grid03.py", line 60, in <module>
zi = griddata((x, y), z, (xi, yi), method='cubic')
File "C:\Python27\lib\site-packages\scipy\interpolate\ndgriddata.py", line 212, in griddata
rescale=rescale)
File "scipy/interpolate/interpnd.pyx", line 840, in scipy.interpolate.interpnd.CloughTocher2DInterpolator.__init__ (scipy\interpolate\interpnd.c:9961)
File "scipy/interpolate/interpnd.pyx", line 78, in scipy.interpolate.interpnd.NDInterpolatorBase.__init__ (scipy\interpolate\interpnd.c:2356)
File "scipy/interpolate/interpnd.pyx", line 123, in scipy.interpolate.interpnd.NDInterpolatorBase._check_init_shape (scipy\interpolate\interpnd.c:3128)
ValueError: invalid shape for input data points
答案 0 :(得分:2)
您的数组x
,y
和z
是二维,形状为(n, 1)
。 griddata
期望一维数组(即形状为(n,)
)。
要解决此问题,当您从my_data
中拉出数组时,请在第二个索引位置使用单个索引而不是切片:
x = my_data[1:, 0]
y = my_data[1:, 1]
z = my_data[1:, 2]