收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

海洋数据处理软件 -海洋数据统计

[复制链接]
: } a9 n' d1 W6 C! H! c% J

气象海洋领域,常常会涉及到大规模的数据处理,比如高时空分辨率的模式数据、雷达数据和卫星数据等。

0 ?( v; \/ Z Q$ p* i) u
* s3 v+ q) w+ Y! L. B

大部分情况,我们一般只会涉及小规模数据处理,对计算效率并不会太过追求。但是当数据量变大时,低效的数据处理所耗费的时间非常明显,因此高效的数据处理方式尤为重要。

. \7 s( h6 C( C% S1 { , I1 H, C; l4 Z+ D

本篇以拟合一个高维数据的正太分布参数为例,介绍如何使用xarray+dask加速数据处理。

" U3 ~- T$ h, p$ A8 r6 V$ H* }: @8 j4 y# U( @" z

数据维度X[time, lev, lat, lon],需要对三维空间每一点,沿着时间维度做正太分布拟合(正太分布拟合只是作为例子,这里可以定义你需要的操作函数)。

# p! Z) H+ Q; G0 ^% W3 W

其中几个关键点解释一下:

9 [5 h3 V$ d- b5 G! v

(1)首先定义拟合正太分布的函数

0 q+ x3 V6 V. x' d/ X& j
def norm_fit(data): * A/ m$ ?! ^5 e2 _4 E loc, scale = st.norm.fit(data)7 }+ A9 J7 L& v" Z4 I return np.array([loc, scale])
8 f. {) i3 |' a; z; e6 }. P Y

这里需要注意的是,拟合的函数,输出参数,需要打包为一个数组。并且它的维度需要和后面aplly_ufun定义的输出维度一致。

1 q% S: Q. c- |6 m

(2)xarray分块

3 u" m, s' ~) M, L4 @5 N9 b
x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])4 G/ C- L8 s1 x7 x# Y4 u x = x.chunk({"lev":5, "lat":100,"lon":100})
8 |& R) q$ C5 T" O- C* \9 X) n

xarray结合dask可以将一个大型数组分成一个个数据块(chunk),需要注意的是我们需要沿着时间维操作,拟合需要整个时间维度的数据,因此时间维time不能分块,只能对其他维度分块。

) D0 X; E5 X8 _2 k

(3)xarray.apply_ufunc函数

' G; \4 u) \* k) v
result = xr.apply_ufunc(norm_fit,0 s0 i" l9 ?' a9 U' c7 G9 A v x, + N$ q7 d3 [; i9 N input_core_dims=[["time"]],+ L' C' [! N( B0 z; j F0 N: } output_core_dims=[["paras"]],! F( t! Y6 Z$ F+ N dask="parallelized", J( H6 X, K/ x; |/ \, Z' L9 j0 A9 R8 Q output_dtypes=[np.float], % J# U$ ]. L }# m% y5 i9 M2 | dask_gufunc_kwargs={output_sizes:{"paras":2}}! v. S* r) o' [' |$ ] )
. `! c9 F! _6 o& g8 h4 t

apply_ufunc函数具体可以参考官网教程,这里只说使用时遇到的困难,即如何定义输出维度:输出维度是用output_core_dim定义的,将输出的拟合参数(期望和标准差)定义为paras维度,维度的大小为2,通过output_sizes参数设置。这样我们输入[time, lev, lat, lon]的数据,在每个空间点对时间维度拟合之后,输出的数据为[lev, lat, lon, paras]。(PS: 这里感谢深雨露大佬的指点)

) K, T, g% s) r0 B* h6 J: A . q8 w0 k1 W% @! }3 \

以下是全部代码:

4 p% q+ W- i. j& v4 E* x# E
from scipy import stats as st " x6 B+ [* q& p" o% g1 H5 f% T! A8 @+ P& C import xarray as xr ; _7 Y, s9 u- w) `& o7 U import dask! V @- E# F( x$ t7 h import numpy as np 4 T; P" W* O' Z, Z$ R from dask.diagnostics import ProgressBar $ H) k9 E K& J" l |7 j; ~% t1 t( e" P( I" f: n0 G def norm_fit(data):$ X3 ~* ? {, J7 f( a( F4 V loc, scale = st.norm.fit(data) . l" f5 S3 V0 l8 ?# i* g; b3 d4 {7 m return np.array([loc, scale]) / ^; @+ E3 Y' C4 [* I0 G v% b* A. N& K: G5 B rs = np.random.RandomState(0)) b1 Y* j5 q, b7 V' _ x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])0 Y& u3 B. J( K: J: c: B- J x = x.chunk({"lev":5, "lat":100,"lon":100}) $ i4 [8 u, j+ P# `: Y( H4 k( e; M3 s( l #使用apply_ufunc计算,并用dask的并行计算4 q; k, V% U% D result = xr.apply_ufunc(norm_fit,8 q. b* C1 v' Q% k x, % X5 z- m8 e9 n; m! d' U input_core_dims=[["time"]],/ L; w# v+ n& L) l output_core_dims=[["paras"]], 9 n; Z' J# P7 h; U dask="parallelized"," _+ ?6 v2 j% G output_dtypes=[np.float],5 [! L2 p2 x$ `9 \. y dask_gufunc_kwargs={output_sizes:{"paras":2}} 0 h8 u' @: K' q* Q9 y L )* e7 i, Z. w5 `! X% j5 f, F& ? , L a" m2 i- L! W #compute进行真实的计算并显示进度 & M! h4 E0 ]0 | with ProgressBar(): 3 f: r: l6 A9 }; R) s: R! w result = results.compute()1 m- A& K# u- E# X/ D - I- x1 P/ {# S* |2 ~+ m #结果冲命名保存到nc文件; d8 y& q* ^, v3 u result = result.rename("norm_paras")3 s) Q7 s, M. D& t+ {; O6 }7 @ result = result.to_netcdf("norm_fit_paras.nc",compute=False) + z2 Q4 K3 P- Q1 N& {7 O6 _ with ProgressBar():/ S1 R: h; m( t result.compute()
; X' S# Z& E, q% c

转自:气海同途

8 Q4 D9 J. z$ g P. e) Q

关注【Ai尚研修科研技术平台】公众号,查看更多课程安排及免费数据资料

% s9 @. n) }& ]7 G " M, c8 ^4 Z! ^+ V! o5 P* P

推荐:

2 J9 {) V% ]4 c, I6 H, J

1、Python语言在地球科学领域中的应用实践技术应用

8 A$ u9 w _! d; ^5 b8 g

2、【夏令营】针对课题组人员AI培养计划:“开启AI科研之路”

, \, P. q0 p8 b5 _, A4 n1 X

3、Python在气象与海洋中的实践技术应用精品课程

8 @3 z) K0 Z- f5 y

4、Python在WRF模型自动化运行及前后处理中的实践技术应用

9 e# V; ?; o1 l" \& ]

5、全套Python机器学习核心技术与案例分析实践应用视频

# N7 c1 z3 ^+ q9 k

6、全套区域高精度地学模拟-WRF气象建模、多案例应用与精美制图精品课程

* ?0 t% a4 h! c. B+ J9 `+ o2 F2 L

7、WRF DA资料同化系统理论、运行与与变分、混合同化新方法技术应用视频教程

3 f" ], ?, E, ^, G+ W& P; M: v9 y/ Q 2 Y! L' h' w2 m # L3 X% T, h7 m8 e' x5 K) R: K6 h$ K9 Y# _7 U' t: z/ v: X8 W
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
庄家真牛牛杂火锅
活跃在前天 12:09
快速回复 返回顶部 返回列表