лучший способ (для меня) сделать его следующей инфраструктурой:
<form method="POST">
<input type="submit" formaction="default_url_when_press_enter" style="visibility: hidden; display: none;">
<!-- all your inputs -->
<input><input><input>
<!-- all your inputs -->
<button formaction="action1">Action1</button>
<button formaction="action2">Action2</button>
<input type="submit" value="Default Action">
</form>
с этой структурой, которую вы отправите, введите направление и бесконечные возможности для остальных кнопок.
К сожалению, появившееся сообщение об ошибке не очень полезно в этом случае, если вы не знаете, что искать!
Проблема с вызовом функции vorticity
в вашем примере заключается в том, что Размерность ваших входных переменных не совпадает. data['u_wind']
и data['v_wind']
являются трехмерными массивами с формой (29, 118, 292)
, но dx
и dy
, поскольку они были вычислены из lat_lon_grid_deltas
, являются двумерными массивами с формами (118, 291)
и (117, 292)
соответственно. Итак, нам нужно получить массивы, которые передают соответствующим образом ... Есть много разных способов сделать это, но я бы порекомендовал два варианта:
Вариант 1: Ручное вещание [ 1123]
Поскольку «дополнительное» измерение, в котором отсутствуют dx
и dy
, является первым измерением (по вертикали), мы можем просто превратить 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: Используйте вспомогательную функцию grid_deltas_from_dataarray()
MetPy также имеет вспомогательная функция, облегчающая извлечение дельты сетки из xarray DataArray. Это также обеспечивает правильное вещание, поэтому вам не придется делать это самостоятельно. Используя его в вашем примере, это будет:
dx, dy = mpcalc.grid_deltas_from_dataarray(data['u_wind'])
vort = mpcalc.vorticity(data['u_wind'], data['v_wind'], dx, dy)