Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MetPy中多个垂直面涡度的计算_Python_Metpy - Fatal编程技术网

Python MetPy中多个垂直面涡度的计算

Python MetPy中多个垂直面涡度的计算,python,metpy,Python,Metpy,我试图计算多个(连续的)垂直水平的梅比涡度。当我尝试为单个级别计算它时,一切正常 这是代码;我使用了来自的横截面示例 然后进行了涡度计算 vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy) 回溯: Traceback (most recent call last): File "E:\Временные файлы\cross_section (1).py", line 63, in <module>

我试图计算多个(连续的)垂直水平的梅比涡度。当我尝试为单个级别计算它时,一切正常

这是代码;我使用了来自的横截面示例

然后进行了涡度计算

vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)
回溯:

Traceback (most recent call last):
  File "E:\Временные файлы\cross_section (1).py", line 63, in <module>
    vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)
  File "C:\ProgramData\Miniconda3\lib\site-packages\metpy\xarray.py", line 436, in wrapper
    return func(*args, **kwargs)
  File "C:\ProgramData\Miniconda3\lib\site-packages\metpy\calc\kinematics.py", line 60, in wrapper
    ret = func(*args, **kwargs)
  File "C:\ProgramData\Miniconda3\lib\site-packages\metpy\calc\kinematics.py", line 121, in vorticity
    dudy = first_derivative(u, delta=dy, axis=-2)
  File "C:\ProgramData\Miniconda3\lib\site-packages\metpy\calc\tools.py", line 920, in wrapper
    return preprocess_xarray(func)(f, **kwargs)
  File "C:\ProgramData\Miniconda3\lib\site-packages\metpy\xarray.py", line 436, in wrapper
    return func(*args, **kwargs)
  File "C:\ProgramData\Miniconda3\lib\site-packages\metpy\calc\tools.py", line 1014, in first_derivative
    combined_delta = delta[tuple(delta_slice0)] + delta[tuple(delta_slice1)]
  File "C:\ProgramData\Miniconda3\lib\site-packages\pint\quantity.py", line 1400, in __getitem__
    value = self._magnitude[key]
IndexError: too many indices for array
我的结论是,输入可以有两个以上的维度,但三维输入(在我的例子中)会产生错误。可以做些什么来修复它们


我对Python绝对是新手,所以我可能犯了一个愚蠢的错误。

不幸的是,如果您不知道要查找什么,那么出现的错误消息在这种情况下没有多大帮助

示例中的
vorticity
函数调用的问题在于输入变量的维度不匹配
data['u_wind']
data['v_wind']
是具有形状
(29、118、292)
的3D阵列,但是
dx
dy
,因为它们是从
lat lon\u grid\u Delta
计算的,分别是具有形状
(118、291)
(117、292)
的2D阵列。因此,我们需要获得适当广播的阵列…有许多不同的方法可以做到这一点,但我建议有两种选择:

选项1:手动广播

由于
dx
dy
缺少的“额外”维度是第一个维度(在垂直方向上),我们可以通过插入一个大小为1的前导维度将
dx
dy
制作成正确对齐的三维阵列:

dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat, initstring=data_crs.proj4_init)
dx = dx[None, :]
dy = dy[None, :]

vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)
选项2:使用辅助功能

MetPy还有一个助手函数,可以轻松地从xarray数据数组中提取网格增量。它还可以确保广播正常进行,因此您不必自己进行广播。在您的示例中使用它,它将是:

dx, dy = mpcalc.grid_deltas_from_dataarray(data['u_wind'])

vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)

你试过简单的二维案例切片阵列吗?@Alessandro,我用过MetPy的
loc
命令。不管怎样,@JonThielen answer完成了任务。
dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat, initstring=data_crs.proj4_init)
dx = dx[None, :]
dy = dy[None, :]

vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)
dx, dy = mpcalc.grid_deltas_from_dataarray(data['u_wind'])

vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)