From fd659f0013b866f6cad1580a2577d92b4cb9f9e0 Mon Sep 17 00:00:00 2001 From: wuww <252740454@qq.com> Date: 星期三, 07 五月 2025 17:41:24 +0800 Subject: [PATCH] 生成降雨文件.py --- data/CreatRainfall.py | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 113 insertions(+), 0 deletions(-) diff --git a/data/CreatRainfall.py b/data/CreatRainfall.py new file mode 100644 index 0000000..8fa06d2 --- /dev/null +++ b/data/CreatRainfall.py @@ -0,0 +1,113 @@ +import sys +import numpy as np +import pandas as pd + + +def generate_normal_distribution(rainfall_total, max_intensity, duration): + """ + 鐢熸垚姝f�佸垎甯冪殑闄嶉洦鏁版嵁 + :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( + "鐢ㄦ硶锛歱ython 鑴氭湰鍚�.py <鍙傛暟1-csv鏂囦欢鍚�> <鍙傛暟2-闄嶉洦妯″紡:姝f�佸垎甯億骞冲潎鍒嗗竷|娉㈠姩骞冲潎鍒嗗竷|鎸佺画涓婂崌> <鍙傛暟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 "姝f�佸垎甯�": + 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 _: # 姝f�佸垎甯冿紝榛樿鍒嗘敮 + 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') -- Gitblit v1.9.3