我想使用python执行blinear插值。
我要插入高度的示例gps点是:
B = 54.4786674627
L = 17.0470721369
使用具有已知坐标和高度值的四个相邻点:
n = [(54.5, 17.041667, 31.993), (54.5, 17.083333, 31.911), (54.458333, 17.041667, 31.945), (54.458333, 17.083333, 31.866)]
z01 z11
z
z00 z10
这是我的原始尝试:
import math
z00 = n[0][2]
z01 = n[1][2]
z10 = n[2][2]
z11 = n[3][2]
c = 0.016667 #grid spacing
x0 = 56 #latitude of origin of grid
y0 = 13 #longitude of origin of grid
i = math.floor((L-y0)/c)
j = math.floor((B-x0)/c)
t = (B - x0)/c - j
z0 = (1-t)*z00 + t*z10
z1 = (1-t)*z01 + t*z11
s = (L-y0)/c - i
z = (1-s)*z0 + s*z1
其中z0和z1
z01 z0 z11
z
z00 z1 z10
我得到31.964,但从其他软件得到31.961。
我的脚本正确吗?
您可以提供另一种方法吗?
这是您可以使用的可重用功能。它包括doctest和数据验证:
def bilinear_interpolation(x, y, points):
'''Interpolate (x,y) from values associated with four points.
The four points are a list of four triplets: (x, y, value).
The four points can be in any order. They should form a rectangle.
>>> bilinear_interpolation(12, 5.5,
... [(10, 4, 100),
... (20, 4, 200),
... (10, 6, 150),
... (20, 6, 300)])
165.0
'''
# See formula at: http://en.wikipedia.org/wiki/Bilinear_interpolation
points = sorted(points) # order points by x, then by y
(x1, y1, q11), (_x1, y2, q12), (x2, _y1, q21), (_x2, _y2, q22) = points
if x1 != _x1 or x2 != _x2 or y1 != _y1 or y2 != _y2:
raise ValueError('points do not form a rectangle')
if not x1 <= x <= x2 or not y1 <= y <= y2:
raise ValueError('(x, y) not within the rectangle')
return (q11 * (x2 - x) * (y2 - y) +
q21 * (x - x1) * (y2 - y) +
q12 * (x2 - x) * (y - y1) +
q22 * (x - x1) * (y - y1)
) / ((x2 - x1) * (y2 - y1) + 0.0)
您可以通过添加以下内容来运行测试代码:
if __name__ == '__main__':
import doctest
doctest.testmod()
在数据集上运行插值将产生:
>>> n = [(54.5, 17.041667, 31.993),
(54.5, 17.083333, 31.911),
(54.458333, 17.041667, 31.945),
(54.458333, 17.083333, 31.866),
]
>>> bilinear_interpolation(54.4786674627, 17.0470721369, n)
31.95798688313631
问题内容: 我正在尝试使用Oracle 11g(在开发中为11.1,在生产中为11.2)进行数值分析,特别是在具有三列感兴趣的表的表上进行线性插值:时间戳,设备ID和值。 值列保存来自设备的数据(标识为deviceid),该数据是在时间戳记中指定的时间获取的。例如,这是伪数据,但是它给出了这样的想法: 来自设备001的时间戳与设备002的时间戳不匹配,但是我需要将来自设备001和002的值放在一行
我正在尝试使用指定的经度和纬度列表重新格式化Netcdf文件。我想使用双线性插值,尽管我已经看到和很有帮助,但我想在r中实现它。我已经看到有一个包,其中包含一个函数,但它只使用中断长度或坐标数,而不是特定的坐标数。 我的目标经纬度在下面 输入数据: 我试图重新划分的网格是在这里找到的netcdf文件的第一个时间步骤:https://esgf-node.llnl.gov/search/cmip6/名
问题内容: 如何在python中以numpy数组表示的图像数据实现双线性插值? 问题答案: 我发现有关此主题的许多问题和许多答案,尽管对于数据由网格上的样本(即矩形图像)组成并表示为numpy数组的常见情况而言,没有一个是有效的。此函数可以将列表作为x和y坐标,并且无需循环即可执行查找和求和。
问题内容: 假设我得到的数据如下: 我想设计一个函数,该函数将使用Python在和,至之间进行线性插值。 我曾尝试浏览本Python教程,但仍然无法理解。 问题答案: 据我了解您的问题,您想编写一些函数,这将给您带来一些价值?然后,基本思路如下: 查找定义了包含的间隔的值的索引。例如,对于您的示例列表,包含间隔为,索引为, 用(即)计算该间隔的斜率。 的值在是现在值加上斜率乘以从距离。 您还需要确
当一些更先进的技术强加他们的标准时,一件无聊的事情是必须与“双击”来执行一个动作有关。但是我正在寻找一种简单的方法来实现它,而不必重写代码一千次。 我想在我的项目中使用Kotlin实现。有人能帮我吗?提前谢谢 只是想知道:我想了解如何进行双击或防止用户进行双击
问题内容: 我有一个简单的脚本blah.py(使用Python 2): 如果我通过以下方式执行脚本: 它输出参数,但是如果我通过以下方式执行脚本: 发生错误: 因此参数不会传递给脚本。 PATH中的python.exe。路径中也包含blah.py的文件夹。 python.exe是执行* .py文件的默认程序。 问题是什么? 问题答案: 执行脚本而不在前面键入“ python”时,你需要了解有关Wi