我需要创建一个与 np.gradient 函数相反的函数。
其中 Vx,Vy 数组(速度分量向量)是输入,输出将是数据点 x,y 处的反导数(到达时间)数组。
我在 (x,y) 网格上有数据,每个点都有标量值(时间)。
我使用了 numpy 梯度函数和线性插值来确定每个点的梯度向量速度(Vx,Vy)(见下文)。
我通过以下方式实现了这一目标:
#LinearTriInterpolator applied to a delaunay triangular mesh
LTI= LinearTriInterpolator(masked_triang, time_array)
#Gradient requested at the mesh nodes:
(Vx, Vy) = LTI.gradient(triang.x, triang.y)
Run Code Online (Sandbox Code Playgroud)
下面的第一幅图显示了每个点的速度向量,点标签表示形成导数 (Vx,Vy) 的时间值

下图显示了导数 (Vx,Vy)的结果标量值,绘制为带有关联节点标签的彩色等高线图。
所以我的挑战是:
我需要逆转这个过程!
使用梯度向量 (Vx,Vy) 或结果标量值来确定该点的原始时间值。
这可能吗?
知道 numpy.gradient 函数是使用内部点的二阶精确中心差异和边界处的一阶或二阶精确一侧(向前或向后)差异计算的,我相信有一个函数可以逆转这一点过程。
我在想,在原始点(x1,y1 处的 t=0)到 Vx,Vy 平面上的任何点 (xi,yi) 之间取线导数会给我速度分量的总和。然后我可以用这个值除以两点之间的距离来得到所用的时间..
这种方法行得通吗?如果是这样,最好应用哪个 numpy 集成函数?
可以在此处找到我的数据示例 [http://www.filedropper.com/calculatearrivaltimefromgradientvalues060820]
您的帮助将不胜感激
编辑:
编辑:
感谢@Aguy 提供了此代码。我尝试使用间距为 0.5 x 0.5m 的网格并计算每个网格点的梯度来获得更准确的表示,但是我无法正确集成它。我也有一些影响我不知道如何纠正的结果的边缘影响。
import numpy as np …Run Code Online (Sandbox Code Playgroud)