【发布时间】:2021-08-04 20:02:16
【问题描述】:
我有一个固定大小的 numpy 数组,其中包含不规则间隔的数据。一个例子是:
[1 0 0 0 3 0 0 0 2 0
0 1 0 0 0 0 0 0 2 0
0 1 0 0 1 0 6 0 9 0
0 0 0 0 6 0 3 0 0 1]
我想保持数组相同的形状,但是用从有数据的点插入的数据覆盖所有 0 值。如果数组中的数据点被认为是高度值,这实际上就是在这些点上创建一个表面。
我一直在尝试使用scipy.interpolate.griddata,但不断出现错误。我从一组已知数据点开始,如 [x, y, value]。以上,(第一行只为简洁起见)
data = [0, 0, 1
0, 3, 3
0, 8, 2 ....................
然后我定义
points = (data[:,0], data[:,1])
values = (data[:,2])
接下来,我定义要采样的点(在本例中,是我想要的网格)
grid = np.indices((4,10))
最后调用griddata
t = interpolate.griddata(points, values, grid, method = 'linear')
这会返回以下错误
ValueError: number of dimensions in xi does not match x
我是否使用了错误的功能?
谢谢!
【问题讨论】:
-
我刚刚通过
interp2d帮助了其他人。这可能适合您的情况,将规则网格拟合到分散的数据点。无论如何,在使用这些函数时,请密切注意参数的所需尺寸和形状,包括源数据和插值点。了解文档至关重要。