我想在风玫瑰上绘制一些风速和风向数据(极地玫瑰图),但是当您向其输入负风向时,似乎我正在使用的库(风玫瑰)不喜欢它。因此,我试图将360度添加到所有负值中,以为它应该绘图。我尝试使用本文if else in a list comprehension中显示的方法,但是数组中仍然有很多负数。
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...]
答案 0 :(得分:2)
在许多情况下,为数组使用布尔值索引掩码是最好的解决方案,因为它比理解更快,更容易。这是矢量化的,因此是最快的,并且是大多数pythonic / numpy样式:
wind_dir[wind_dir < 0] += 360
答案 1 :(得分:2)
您的逻辑是正确的。您只需要将列表理解分配给一个变量。列表理解不是就地操作。例如:
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)