ValueError:griddata操作中输入数据点的无效形状

时间:2015-08-23 10:59:28

标签: scipy

使用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文件:

http://pastebin.com/nj7THgMw

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

1 个答案:

答案 0 :(得分:2)

您的数组xyz二维,形状为(n, 1)griddata期望一维数组(即形状为(n,))。

要解决此问题,当您从my_data中拉出数组时,请在第二个索引位置使用单个索引而不是切片:

x = my_data[1:, 0]
y = my_data[1:, 1]
z = my_data[1:, 2]