惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Simon Willison's Weblog
Simon Willison's Weblog
H
Help Net Security
F
Fortinet All Blogs
H
Heimdal Security Blog
S
Schneier on Security
L
LangChain Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
NISL@THU
NISL@THU
P
Palo Alto Networks Blog
J
Java Code Geeks
博客园 - 【当耐特】
The Last Watchdog
The Last Watchdog
W
WeLiveSecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost
I
InfoQ
Recorded Future
Recorded Future
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
腾讯CDC
C
Check Point Blog
量子位
M
MIT News - Artificial intelligence
GbyAI
GbyAI
罗磊的独立博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
小众软件
小众软件
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
V2EX - 技术
V2EX - 技术
T
Threatpost
Engineering at Meta
Engineering at Meta
Attack and Defense Labs
Attack and Defense Labs
T
Tailwind CSS Blog
S
Securelist
The Cloudflare Blog
博客园 - 叶小钗
L
LINUX DO - 最新话题
T
Troy Hunt's Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
爱范儿
爱范儿

遐说

2026第一场日出日落-黄山 [徒步]宁波九龙爱心线 [徒步]仙居公盂徒步+丽人谷溯溪(多图) 文献引用批量标注蓝色-Zotero/EndNote [出差]内蒙草原风光 [徒步]浙东小九寨 [徒步]西湖小猫线 微软Office365家庭版拼车5年180 2024浏阳跨年烟火 一路向北-广西 落日余晖——武汉东湖 博士论文盲审通过 青海出差 我开盒了我自己 hexo-butterfly+artalk无法显示文章PV浏览次数 记某站字体混淆解析方案 记第一次进藏 2024川西大环线 2024武汉东湖樱花园 zotero批量修改条目语言解决”等”和”et al”混排问题 torch_geometric_temporal安装报错找不到to_dense_adj 武汉冻雨&乡村春节 云南镇雄县凉水村滑坡:卫星影像解析 博客聚合平台RSS订阅-BlogFinder&博友圈&十年之约 腾讯云CDN正式取消免费10G流量包 2023跨年闲逛武汉 观感|小米SU7技术发布会 【留痕】解密微信聊天记录工具:年度报告、聊天导出一键搞定! 小米电脑管家 vs. MIUI+: 手机与PC协同体验大比拼! Waline私有化部署(Docker+VPS) rclone数据同步使用记录(OneDrive+COS+AList) 科研绘图工具 秋意渐浓 Docker buildx交叉编译Python记录 Word分章节图片公示编号方法 Lightroom+Google Map生成个人足迹 评论|如何看待面青地项目允许博士后变更依托单位 Memos添加utterances评论区 收到明信片啦! [Adobe]Your Adobe app is not genuine解决方案-Clash版 尝试配置PicGo-Core日志输出等级 巴东三峡巫峡长 摄影|东湖绿道 旅行|彩云之南 超实用的铁路地图网站 新冠首阳 树莓派netplan连接开放网络(无密码WIFI) 周末|流浪地球2|维也纳展映 维也纳黄昏&夜景 Sony A7M4/M3欧版解锁多国语言 GRASS斜坡单元分割插件(r.slopeunits) windows移植方案 周末|Prater公园|夜景 快乐五一|布拉格Praha 周末|Melk小镇一日游 CDN流量太贵?图床图片批量压缩替换 维也纳|生活感受|交通|物价|通货膨胀 GitHub Remark|给Gay Hub的小伙伴加备注 周末自制烤冷面-不想干活 布达佩斯|匈牙利游记(多图) Notion2Markdown联动发布Hexo博客-自动化部署方案 SPI/TWI水文参数计算公式-ArcGIS Pro 【再见】难得是欢聚, 最是离别多 拯救者R9000P氮化镓电源适配器测评 今天你的华为P30无限重启了吗? pyTranscriber字幕生成软件(带代理版本) Adobe Illustrator错误代码160解决方案 EndNote导入PDF文件关联(SCI-RIS-Helper)插件 ZED-F9PK4 RTK GNSS模块使用指南 pyeemd安装教程--win10 wsl + ubuntu 樱花草 - 小学回忆 咸九高速-幕阜山扶贫攻坚重点项目 NXP i.MX6ULL平台Nodejs & npm 安装教程 全国分省12.5米DEM数字高程数据(ALOS 12.5m)下载 2018&2010全国四级行政区划(省-市-区/县-街道/乡镇)c 全国/湖南省/浙江省水文监测站基本数据&湖北省水文观测站历史数据 天舟二号发射成功 解决方案:Grammarly for Word 无法使用 SDZM: Software for determining shear failure regions of rock joints CNKI知网油猴插件-一键导入Endnote&下载PDF RSS 订阅地大新闻 - CUG News Word 公式字体替代方案 ArcGIS License Manager 无法启动 - Sorry, this application cannot run under a virtual machine html table 批量转 Excel(xlsx) ImageColorAnalysisTool-图像颜色分析工具-Matlab GUI版 matlab柱状图(bar)转折线图(line)方案 图像主要颜色分析工具(pyImageColorAnalysisTool) 科研资料备份同步方案(FreeFileSync) 海量文献自定义格式整理方法(EndNote) CUG校外访问内网网站方法(官方VPN) 通过三个点绘制三维圆弧-python 记挖竹笋 日常实用小软件 长江流域三峡库区水情水位信息获取 EndNote导入文献期刊名-J无法识别解决方案 pymongo 使用记录 Redis学习记录 Laravel 5.6 学习记录 文件名批量提取工具介绍及使用教程 win7x64 下 redis 的安装 CI框架常用数据库操作技巧
Python读取NetCDF文件-裁剪&计算
Dorad · 2024-05-12 · via 遐说

依据前 30 年的年降雨数据,按 Gumbel 分布估算 10 年一遇、20 年一遇、50 年一遇和 100 年一遇的极端降雨工况下的降雨分布,并生成 nc 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152


import netCDF4 as nc
import numpy as np
import os
import time
import multiprocessing as mp

def Gumble_func(data,N,length):








if np.isnan(data).any():
return np.nan
datasort = np.sort(data, axis=0)[::-1]
data_select_sorts = datasort[0:length - 1]
mu = np.mean(data_select_sorts)
sum_mm = 0
for data_select_sort in data_select_sorts:
sum_mm = sum_mm + (data_select_sort - mu) ** 2
sigma = np.sqrt(sum_mm / (len(data_select_sorts) - 1))
alpha = np.pi / (np.sqrt(6) * sigma)
u = mu - 0.57721 / alpha
for i in np.arange(1, 99999, 0.1):
if 1 / N >= 1 - np.exp(-np.exp(-alpha * (i - u))):
Recurrence_period_value = i

break
return Recurrence_period_value

def cal_N_year_appear_single(YEARLY_RAINFALL, i, j, N=10):
rainfall_history = YEARLY_RAINFALL[:,i,j].flatten()
if np.isnan(rainfall_history).any():
return (i,j,np.nan)
return (i,j,Gumble_func(rainfall_history, N, rainfall_history.shape[0]))

def cal_N_year_appear(YEARLY_RAINFALL, N=10):
yearly_rainfall_N = np.empty(YEARLY_RAINFALL.shape[1:])



idx = np.where(~np.isnan(YEARLY_RAINFALL[0,:,:]))
print('Number of non-nan elements: ', len(idx[0]))
with mp.Pool(processes=6) as pool:
results = pool.starmap(cal_N_year_appear_single, [(YEARLY_RAINFALL, i, j, N) for i, j in zip(idx[0], idx[1])])


pool.close()
for i, j, result in results:
yearly_rainfall_N[i,j] = result
return yearly_rainfall_N

def main():
dir = 'nc_crop/'

fileList = os.listdir(dir)

print('Files in directory: ', len(fileList))



yearly_rainfall_sum = []

src = None

for file in fileList[:3]:
print('Processing file: ', file)
data = nc.Dataset(dir + file)
print('Variables in file: ', data.variables)
print('Dimensions in file: ', data.dimensions)
print('Shape of variable: ', data.variables['time'].shape)
print('Data type of variable: ', data.variables['time'].dtype)
print('Values of variable: ', data.variables['time'][:])

pre = np.array(data.variables['pre'][:])
print('Shape of pre: ', pre.shape)

year = int(file.split('_')[-1].split('.')[0])
print('Year: ', year)

monthly_days = [31, 28 if year % 4 != 0 else 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

pre_sum = np.dot(pre.transpose((1,2,0)), monthly_days)

print('Shape of pre_sum: ', pre_sum.shape)
yearly_rainfall_sum.append(pre_sum)
print('-----------------------------------')
src = data

yearly_rainfall_sum = np.array(yearly_rainfall_sum)




print('Shape of yearly_rainfall_sum: ', yearly_rainfall_sum.shape)
yearly_rainfall_sum_mean = np.mean(yearly_rainfall_sum, axis=0)
print('Shape of yearly_rainfall_sum_mean: ', yearly_rainfall_sum_mean.shape)



print('开始计算10年一遇降雨量...')
yearly_rainfall_10 = cal_N_year_appear(yearly_rainfall_sum, 10)
print('重现期为10年的平均降水量: ', yearly_rainfall_10.mean())

print('开始计算20年一遇降雨量...')
yearly_rainfall_20 = cal_N_year_appear(yearly_rainfall_sum, 20)
print('重现期为20年的平均降水量: ', yearly_rainfall_20.mean())

print('开始计算50年一遇降雨量...')
yearly_rainfall_50 = cal_N_year_appear(yearly_rainfall_sum, 50)
print('重现期为50年的平均降水量: ', yearly_rainfall_50.mean())

print('开始计算100年一遇降雨量...')
yearly_rainfall_100 = cal_N_year_appear(yearly_rainfall_sum, 100)
print('重现期为100年的平均降水量: ', yearly_rainfall_100.mean())



out = nc.Dataset('yearly_rainfall_%s.nc'%time.time(), 'w', format='NETCDF4')

out.createDimension('latitude', src.dimensions['latitude'].size, )
out.createDimension('longitude', src.dimensions['longitude'].size)

lat=out.createVariable('latitude', 'f4', ('latitude',))
out.variables['latitude'][:] = src.variables['latitude'][:]
long=out.createVariable('longitude', 'f4', ('longitude',))
out.variables['longitude'][:] = src.variables['longitude'][:]
lat.units = 'degreesN'
long.units = 'degreesE'

out.createVariable('yearly_rainfall_sum', 'f8', ('longitude','latitude'))
out.variables['yearly_rainfall_sum'][:] = yearly_rainfall_sum_mean
out.createVariable('yearly_rainfall_10', 'f8', ('longitude','latitude'))
out.variables['yearly_rainfall_10'][:] = yearly_rainfall_10
out.createVariable('yearly_rainfall_20', 'f8', ('longitude','latitude'))
out.variables['yearly_rainfall_20'][:] = yearly_rainfall_20
out.createVariable('yearly_rainfall_50', 'f8', ('longitude','latitude'))
out.variables['yearly_rainfall_50'][:] = yearly_rainfall_50
out.createVariable('yearly_rainfall_100', 'f8', ('longitude','latitude'))
out.variables['yearly_rainfall_100'][:] = yearly_rainfall_100
out.close()
print('File written successfully.')

if __name__ == '__main__':
print('Start processing...')
main()
print('Processing finished.')