我有数据在以下方式:x
经度数组、y
经度数组以及这些纬度和经度的降雨量z
数组。我想创建一个矩阵来测试不同的插值方法(其中许多方法在scipy
或类似工具包中默认不可用)。x
和y
不均匀地间隔但具有相同的长度(即,x
的某些部分具有以下值:34.9912, 35.1568, 35.8881
,但后来x
包含46, 45, 47
)。我想创建一个最粗糙的可能的规则间隔矩阵,包含每一个点。我举了一个例子:
假设x=[36,38,31]
、y=[12,19,15]
和z=[1,2,3]
。我想创建以下矩阵:
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0
字符串
其中正值位于函数取值的位置。我如何在Python或其他语言中做到这一点?(我更喜欢Python)
有人问了一个类似的问题here,并被告知要做以下事情:
from scipy import interpolate
f1 = interpolate.interp1d(x, y)
x_new = np.linspace(x[0], x[-1], max_len)
y_new = f1(x_new)
型
但是这不起作用,因为它不包含原始点。另外,scipy.interpolate.interp1d
很快就会被弃用,所以我正在寻找一个更现代的解决方案。
上面的例子显然是一个带有整数间隔的玩具例子。由于真实的数据包含小数点后第四位,我可以预见,我需要至少10000个点才能向前移动一个整数,这在处理真实数据时会很快变得笨拙,最终可能包含整个世界。它不是存储数据,而是插值,这需要时间,所以我希望尽可能减少计算时间。
不过,我不知道这是否处理问题的最佳方法。互联网上的例子建议使用griddata
或类似的东西来快速生成网格。然而,这具有不均匀间隔的缺点,并且仅创建网格。使用像linspace(x[0],x[-1],10000)
这样的东西是正确的方法吗?如果我最终使用我提出的方法,并且如果事实证明它可以以更简单的方式完成,那么我不想浪费我的时间,我可以预见在测试插值时会有无尽的等待时间。
编辑1:正如@Reinderien所建议的,这是纬度和经度的直方图:
x1c 0d1x的数据
的
以下是通过np.diff(np.sort)
获得的直方图
[
] 4
编辑2:第二部分x1c4d 1xx 1c 5d 1x的更好的分箱图
2条答案
按热度按时间6fe3ivhb1#
值得这么做吗?
这取决于很多事情,包括你有多少点,你需要什么样的精度和你能维持什么样的记忆影响。
从根本上说,这是一个GCD;产生以下轴:
个字符
在两个维度上的微分被输入到一个GCD中,它给你最粗略的间距。请注意,我已经将您的输入数据更改为“更有趣”,因此
xspace
的值为2;否则,您的两个示例数组都具有最大公约数为1的微分。对于浮点值,例如
34.9912
,您需要乘以精度因子(1 e4?)并强制转换为整数。精度因子越高,正则化网格可能会变得越大。vfwfrxfs2#
一种可能性是考虑使用高斯过程来生成一个函数,该函数可以预测任意点的值,然后从你想要的任何网格中生成这些点。下面的例子使用了一个默认的内核,它只规定了一个一般平滑的函数。如果您希望在拟合中获得特定的行为,您必须对内核进行自己的研究。
字符串