пятница, 3 августа 2018 г.

Быстрая замена в 3D массиве по признаку

Дан трёхмерный массив z (time, lat, lon), в котором необходимо по условию cond заменить значения на undef.
Собственно решение с помощь numpy.where

import numpy as np

undef = -99
ishape = (3, 4, 5)
z = (np.arange(-30 ,30, 1)).reshape(ishape)   # 3D-array
print('Before', z)
tz0 = z.mean(axis=0)   # 2D-array
cond = (tz0 < -5.)
zz = np.where(~cond, z, undef)   # Тильда
print('After', zz)

P.S. Тильда (~) инверсирует логическую маску: превращает все True в False. И наоборот

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...