簡體   English   中英

如果,則為大型數組的其他語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM