[英]If, else statement for large array
我想在風玫瑰上繪制一些風速和風向數據(極地玫瑰圖),但似乎我正在使用的庫(風玫瑰)不喜歡向它提供負風向。 因此,我試圖將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...]
與許多情況一樣,為數組使用布爾值索引掩碼是最好的解決方案,因為它比理解更快,更容易。 這是矢量化的,因此是最快的,並且是大多數pythonic / numpy風格的:
wind_dir[wind_dir < 0] += 360
你的邏輯是正確的。 您只需要將列表理解分配給一個變量。 列表理解不是就地操作。 例如:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.