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')
|