使用np.梯度

2024-06-28 15:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着计算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}$

Tags: 数据代码np时间order形状梯度散度
1条回答
网友
1楼 · 发布于 2024-06-28 15:16:22

不幸的是,我不能对你的问题发表评论要求解释,因为我没有足够的声誉,所以我不得不做出一些假设。如果我错了,请随意纠正我。在

我假设dqu_18hrdqv_18hr是存储两个不同函数的值的数组,u(t,y,x)和v(t,y,x)。如果我理解正确,你要计算du/dx和dv/dy

我不知道存储在数组中的dx和dy值是什么,这也是因为您将它们定义为2D数组,但将它们用作1D数组。我假设dx和{}是计算u和v的点的坐标,它们产生的网格是规则的。在

代码的第一个问题是,传递的是单个标量数作为的第二个参数np.梯度. 完成后,numpy假设这是点之间的距离。然而,这个距离在每次迭代中都会改变。对于这种情况,我认为这是一个非常正确的定义。在

代码的另一个问题是它没有利用numpy向量化,显式地使用了三个for循环。这在计算上效率极低。在

我建议您使用以下代码:

x = dx[0, :]  # or whatever is the correct definition
y = dy[:, 0]  # not enough info in the post to understand it

a = np.gradient(dqu_18hr, x, axis=2, edge_order=2)
b = np.gradient(dqv_18hr, y, axis=1, edge_order=2)

还请注意,在您的代码中,x与轴2相关,y与轴1相关联,这是绝对合法但不寻常的,因此您可能需要检查这是否是一个错误。在

相关问题 更多 >