scipy Python:使用坐标和时间集插值数据网格

8xiog9wr  于 2023-06-23  发布在  Python
关注(0)|答案(1)|浏览(186)

我有一个8775x100的二维数组,它是从8775x10x10数组展平的,10x10是网格,8775是每个时间步的值。
我在x和y的1d数组中获得了这个网格的坐标(制作10x10布局),沿着另一对新坐标的1d数组(较小的网格,相同的10x10布局)。
如何将第一组坐标上的8775x100的粗数据插值到另一组坐标上?
我试过scipy的griddata.插值,但我不能完全得到我的头周围所有的坐标和值去.

pgvzfuti

pgvzfuti1#

我看不出有什么目的重塑你的扁平化你的阵列;这将丢弃关于网格在x和y维度上如何排列的信息。你想要这个信息。
本质上,您所描述的只是一个规则的网格,而scipy有一个方便的RegularGridInterpolator,我们可以轻松地构造它。

import numpy as np
import scipy.interpolate

# Starting data:
ts = np.linspace(0, 100.0, 8775)  # 0 to 100 seconds maybe
xs = np.linspace(0, 10.0, 10)     # 0 to 10 meters maybe
ys = np.linspace(0, 10.0, 10)     # 0 to 10 meters maybe
points = (ts, xs, ys)
values = np.random.rand(8775, 10, 10)  # array of data

interp = scipy.interpolate.RegularGridInterpolator(points, values)

您可以通过对任何给定的时空坐标进行评估来测试它。

interp(t, x, y)

在一个新的数据点网格上构建整个数据字段需要我们使用meshgrid来构建每个点,并评估在这些点上的插值。

# Desired points for interpolated data (could be any range, and sizes)
new_ts = ts                           # maybe the same time steps
new_xs = np.linspace(0.5, 3.14, 10)   # maybe different range
new_ys = np.linspace(0, 10.0, 20)     # maybe different steps

new_points = np.meshgrid(new_ts, new_xs, new_ys, indexing='ij')

然后可以对它们进行插值(这里我转换为元组,以免interp错误地尝试将输入用作一个坐标,这当然会失败)。

new_values = interp(tuple(new_points))

相关问题