gpt4 book ai didi

python - 如何找到最接近网格值的点

转载 作者:行者123 更新时间:2023-11-30 23:06:35 25 4
gpt4 key购买 nike

我正在尝试从函数的最近邻点对函数的值进行插值。

我在网格网格上指定了 f,[x_grid,y_grid,z_grid] = np.meshgrid(x_range,y_range,z_range),我想为其找到 a 的近似值随机点p_rand = (x_rand, y_rand, z_rand)。找到最近网格点的索引并插入其值的有效方法是什么?它是 3D 的 - 最近的立方体或四面体点就可以了。

最佳答案

为了扩展 @hpaulj 和我的评论...您正在寻找的类(class)是 scipy.interpolate.NearestNDInterpolator

这个类是基于scipy自己的scipy.spatial.cKDTreecKDTree 类实现 k-dimensional space-partition tree ,或“k-d树”数据结构,以构建时间和空间换取快速搜索。

要使用scipy.interpolate.NearestNDInterpolator,您需要初始化一个实例

from scipy.interpolate import NearestNDInterpolator
interpolator = NearestNDInterpolator(your_points, your_values_on_the_points)

创建插值器后,用它来计算random_point处的插值值

interpolant = interpolator(random_point)

一旦创建,插值器就可以重复用于不同的输入点,这是一件好事(tm)。您还可以通过将所有点传递到调用中来评估多个点的插值值。 [1]

如果你看source ,您将了解如何使用 cKDTree 实现插值器。

[1] 实际上有一个潜在的优化:如果您需要对许多点进行“向量化”评估,底层 cKDTreequery() 方法 supports parallelisation ,由在线程中运行的 native C 代码完成。尽管 scipy 自己的 NearestNDInterpolator 实现不使用此功能(可能是为了满足最大公约数),但您可以通过创建自己的使用并行化的子类来覆盖此功能适当选择n_jobs参数。

注意:使用基于 k-d 树的插值器的真正好处是它的应用可以扩展到任意形状(不一定是矩形)的“网格”。

<小时/>

编辑:

哦,所以您打算使用最近邻居进行线性插值?

非常抱歉,我误读了您的问题!

但是,你有两个选择。

  1. 如果您的网格足够规则,并且其构造(在所有维度上您都知道起始值/结束值/步长),那么编写一个函数 findneighbor() 并不难给定查询点的坐标来定位邻居。然后进行普通线性插值。

  2. 如果你的“网格”不是很规则,并且你只有很多磨点坐标(可能不在矩形格子上),你仍然可以使用scipy.spatial.cKDTree 来定位 N 个最近的邻居(可能是 N = 1 +(网格的维度))。之后,您在 N 点上进行插值。

关于python - 如何找到最接近网格值的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com