¶Ô±ÈÐÂÎļþ |
| | |
| | | import sys |
| | | import numpy as np |
| | | import pandas as pd |
| | | |
| | | |
| | | def generate_normal_distribution(rainfall_total, max_intensity, duration): |
| | | """ |
| | | çææ£æåå¸çé鍿°æ® |
| | | :param rainfall_total: é鍿»é |
| | | :param max_intensity: æå¤§é¨å¼º |
| | | :param duration: é鍿¶é´ï¼åéï¼ |
| | | :return: é鍿°æ®å表 |
| | | """ |
| | | mean = rainfall_total / duration |
| | | std_dev = (max_intensity - mean) / 3 |
| | | rainfall = np.random.normal(mean, std_dev, duration) |
| | | rainfall = np.clip(rainfall, 0, None) # ç¡®ä¿éé¨å¼ºåº¦éè´ |
| | | rainfall = rainfall * rainfall_total / rainfall.sum() # å½ä¸å |
| | | return rainfall |
| | | |
| | | |
| | | def generate_increasing_distribution(rainfall_total, max_intensity, duration): |
| | | """ |
| | | çæéæ¸ä¸åçé鍿°æ® |
| | | :param rainfall_total: é鍿»é |
| | | :param max_intensity: æå¤§é¨å¼º |
| | | :param duration: é鍿¶é´ï¼åéï¼ |
| | | :return: é鍿°æ®å表 |
| | | """ |
| | | rainfall = np.linspace(0, max_intensity, duration) |
| | | rainfall = rainfall * rainfall_total / rainfall.sum() # å½ä¸å |
| | | return rainfall |
| | | |
| | | |
| | | def generate_uniform_distribution(rainfall_total, max_intensity, duration): |
| | | """ |
| | | çæå¹³ååå¸çé鍿°æ® |
| | | :param rainfall_total: é鍿»é |
| | | :param max_intensity: æå¤§é¨å¼º |
| | | :param duration: é鍿¶é´ï¼åéï¼ |
| | | :return: é鍿°æ®å表 |
| | | """ |
| | | rainfall = np.full(duration, rainfall_total / duration) |
| | | return rainfall |
| | | |
| | | |
| | | def generate_fluctuating_distribution(rainfall_total, max_intensity, duration): |
| | | """ |
| | | çææ³¢å¨åå¸çé鍿°æ® |
| | | :param rainfall_total: é鍿»é |
| | | :param max_intensity: æå¤§é¨å¼º |
| | | :param duration: é鍿¶é´ï¼åéï¼ |
| | | :return: é鍿°æ®å表 |
| | | """ |
| | | rainfall = np.random.uniform(0, max_intensity, duration) |
| | | rainfall = rainfall * rainfall_total / rainfall.sum() # å½ä¸å |
| | | return rainfall |
| | | |
| | | |
| | | def save_to_file(rainfall, filename): |
| | | """ |
| | | å°é鍿°æ®ä¿åå°æä»¶ |
| | | :param rainfall: é鍿°æ®å表 |
| | | :param filename: æä»¶å |
| | | """ |
| | | df = pd.DataFrame({'rainfall': rainfall}) |
| | | df.to_csv(filename, index=False) |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | # æ£æ¥åæ°æ°éï¼sys.argv[0] æ¯èæ¬åç§°ï¼ |
| | | if len(sys.argv) != 6: |
| | | print("é误ï¼è¯·æä¾5ä¸ªåæ°ï¼") |
| | | print( |
| | | "ç¨æ³ï¼python èæ¬å.py <åæ°1-csvæä»¶å> <åæ°2-é鍿¨¡å¼:æ£æåå¸|å¹³ååå¸|æ³¢å¨å¹³ååå¸|æç»ä¸å> <åæ°3-é鍿»é> <åæ°4-æå¤§é¨å¼º> <åæ°5-é鍿¶é´(åé)>") |
| | | sys.exit(1) # éé¶éåºç 表示é误 |
| | | |
| | | rainfall_total = float(sys.argv[3]) |
| | | max_intensity = float(sys.argv[4]) |
| | | duration = int(sys.argv[5]) |
| | | |
| | | match sys.argv[2]: |
| | | case "æ£æåå¸": |
| | | normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration) |
| | | save_to_file(normal_rainfall, sys.argv[1]) |
| | | case "æç»ä¸å": |
| | | increasing_rainfall = generate_increasing_distribution(rainfall_total, max_intensity, duration) |
| | | save_to_file(increasing_rainfall, sys.argv[1]) |
| | | case "å¹³ååå¸": |
| | | uniform_rainfall = generate_uniform_distribution(rainfall_total, max_intensity, duration) |
| | | save_to_file(uniform_rainfall, sys.argv[1]) |
| | | case "æ³¢å¨å¹³ååå¸": |
| | | fluctuating_rainfall = generate_fluctuating_distribution(rainfall_total, max_intensity, duration) |
| | | save_to_file(fluctuating_rainfall, sys.argv[1]) |
| | | case _: # æ£æåå¸ï¼é»è®¤åæ¯ |
| | | normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration) |
| | | save_to_file(normal_rainfall, sys.argv[1]) |
| | | |
| | | # rainfall_total = 100 # é鍿»é |
| | | # max_intensity = 10 # æå¤§é¨å¼º |
| | | # duration = 120 # é鍿¶é´ï¼åéï¼ |
| | | |
| | | # çæä¸ååå¸çé鍿°æ® |
| | | # normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration) |
| | | # increasing_rainfall = generate_increasing_distribution(rainfall_total, max_intensity, duration) |
| | | # uniform_rainfall = generate_uniform_distribution(rainfall_total, max_intensity, duration) |
| | | # fluctuating_rainfall = generate_fluctuating_distribution(rainfall_total, max_intensity, duration) |
| | | |
| | | # ä¿åå°æä»¶ |
| | | # save_to_file(normal_rainfall, 'normal_rainfall.csv') |
| | | # save_to_file(increasing_rainfall, 'increasing_rainfall.csv') |
| | | # save_to_file(uniform_rainfall, 'uniform_rainfall.csv') |
| | | # save_to_file(fluctuating_rainfall, 'fluctuating_rainfall.csv') |