我试着计算u风和v风的风梯度。u值和v值具有以下形状的三维阵列:
u(122,9,9)使得u(时间,纬度,经度)。这同样适用于v
我还计算了dx和dy值(在二维数组中,针对lat和lon方向)
例如,我的代码示例如下:
dudx = np.gradient(u[0,0,:], dx[0,0], edge_order=2)
dvdy = np.gradient(v[0,:,0], dy[0,0], edge_order=2)
然后我可以求和dudx和dvdy得到梯度。我有一个已经计算了散度的数据,在将我的计算结果与散度数据进行比较后,我希望这些值是相同的,但是它们不是。除了使用np.梯度功能不正确。在
我想知道我上面计算u和v风梯度的方法是否正确。在
干杯。在
编辑
我用来计算风梯度的完整代码如下:
^{pr2}$
不幸的是,我不能对你的问题发表评论要求解释,因为我没有足够的声誉,所以我不得不做出一些假设。如果我错了,请随意纠正我。在
我假设
dqu_18hr
和dqv_18hr
是存储两个不同函数的值的数组,u(t,y,x)和v(t,y,x)。如果我理解正确,你要计算du/dx和dv/dy我不知道存储在数组中的dx和dy值是什么,这也是因为您将它们定义为2D数组,但将它们用作1D数组。我假设}是计算u和v的点的坐标,它们产生的网格是规则的。在
dx
和{代码的第一个问题是,传递的是单个标量数作为的第二个参数np.梯度. 完成后,numpy假设这是点之间的距离。然而,这个距离在每次迭代中都会改变。对于这种情况,我认为这是一个非常正确的定义。在
代码的另一个问题是它没有利用numpy向量化,显式地使用了三个for循环。这在计算上效率极低。在
我建议您使用以下代码:
还请注意,在您的代码中,x与轴2相关,y与轴1相关联,这是绝对合法但不寻常的,因此您可能需要检查这是否是一个错误。在
相关问题 更多 >
编程相关推荐