3

网格数据错误

(改编自:来自 xyz 数据的 Matplotlib 轮廓:griddata 无效索引

我有一个对应于一组坐标的一些值的矩阵。我想从外部文件加载数据并使用 griddata 对象在点之间进行插值。但是,在运行代码时出现错误:

来自griddata的“builtins.IndexError:索引0超出了轴0的范围,大小为0”。我不懂这啥意思?

一段示例代码:

def main():
#https://stackoverflow.com/questions/13781025/matplotlib-contour-from-xyz-data-griddata-invalid-index
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as ml

ndata = 121
ny, nx = 100, 200
xmin, xmax = 0, 10
ymin, ymax = 0, 10

Data = np.loadtxt('Data.dat')
Data = Data.flatten(1)

x = np.array([j for i in np.arange(0,11,1) for j in np.arange(0,11,1)])
y = np.array([j for i in np.arange(0,11,1) for j in np.arange(0,11,1)])
#x = np.random.randint(xmin, xmax, ndata)
#y = np.random.randint(ymin, ymax, ndata)

xi = np.linspace(xmin, xmax, nx)
yi = np.linspace(ymin, ymax, ny)
zi = ml.griddata(x, y, Data, xi, yi)

plt.contour(xi, yi, zi, 15, linewidths = 0.5, colors = 'k')
plt.pcolormesh(xi, yi, zi, cmap = plt.get_cmap('rainbow'))

plt.scatter(x, y, marker = 'o', c = 'b', s = 5, zorder = 10)
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
plt.show()

Data.dat 可从以下网址获得:http: //pastebin.com/Uk8SHA1F

请注意它是如何与提供 x 或 y 的推导结合使用的,而另一个坐标是随机坐标(已注释),但在对 x 和 y 都使用推导时却不行?

4

1 回答 1

3

来自griddata的“builtins.IndexError:索引0超出了轴0的范围,大小为0”。我不懂这啥意思?

index 0 is out of bounds for axis 0 with size 0

如果在预期二维时提供一维数组,并且第一个索引超出范围,则会出现此错误。例如:

>>> np.array([])[0,:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: index 0 is out of bounds for axis 0 with size 0

>>> np.array([2,4])[3,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: index 3 is out of bounds for axis 0 with size 2

请注意,如果您没有为第二轴指定任何值,您会得到一个不同的错误:

>>> np.array([])[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: index out of bounds
于 2014-01-11T03:40:39.043 回答