Если, еще заявление для большого массива - PullRequest
0 голосов
/ 26 июня 2018

Я хочу нанести некоторые данные о скорости и направлении ветра на розу ветров (график полярной розы), но кажется, что библиотека, которую я использую (роза ветров), не любит, когда вы подаете на нее отрицательное направление ветра. Таким образом, я пытаюсь добавить 360 градусов ко всем отрицательным значениям, думая, что это должно быть построено. Я попытался сделать метод, показанный в этом посте, , если еще в понимании списка , но у меня все еще есть много отрицательных чисел в моем массиве.

 wind_speed=np.sqrt(u**2+v**2)
 wind_dir_calc=np.arctan(v/u)
 wind_dir=np.degrees(wind_dir_calc)

 [x+360 if x<0 else x+0 for x in wind_dir]

 np.set_printoptions(threshold=np.inf)
 print(wind_dir)

Sample output:
 [-6.34019175  84.6607632  -58.73626831  55.40771131  73.87242417
 66.70543675  48.0127875   50.71059314  52.27500496  38.15722659
 37.50414236  48.14495746  -2.20259816  16.53483786  38.75162833
 19.0466243  -58.67130713 -63.00416161 -65.41842552 -74.96956948
-74.23281746 -68.36911316 -46.46880071 -83.26398879 -80.75388725...]

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Твоя логика - это звук. Вам просто нужно присвоить свое понимание списка переменной. Понимание списка не является операцией на месте. Например:

wind_dir = [x+360 if x<0 else x+0 for x in wind_dir]

Однако, поскольку вы используете массивы NumPy, я рекомендую использовать векторизованную операцию на месте:

wind_dir[wind_dir < 0] += 360

Чтобы создать новый массив, вы можете использовать numpy.where:

wind_dir = np.where(wind_dir < 0, wind_dir + 360, wind_dir)
0 голосов
/ 26 июня 2018

Как и во многих случаях, использование маски логического индекса для вашего массива является лучшим решением, так как это быстрее и проще, чем понимание. Это векторизация и, таким образом, быстрая и наиболее питоническая / numpy-стиль:

wind_dir[wind_dir < 0] += 360
...