奇异值分解SVD(Singular Value Decomposition)是一种矩阵分解方法,在气象领域中常用来分析两个气象场场之间的关系。
NCL的函数库中与SVD相关的函数包括svd_lapack,svdcov,svdcov_sv,svdstd,svdstd_sv。
svd_lapack:用于计算一般矩形矩阵的奇异值分解。具体写法为:
s = svd_lapack (a, "S" , "S", 0, u, v)
这里,a是一个(/nca,nra/)矩阵,两个“S”为固定写法,0表示输出v时不转置(1则表示转置v),u和v分别为左、右奇异向量,u的长度和属性都和a相同,而v的长度为(/nca,nca/),属性也与a相同。
svdcov:对两个场进行奇异值分解,并返回与这两个场相关的左右同构和异构数组。具体写法为:
svd_rv = svdcov(s,z,nsvd,homlft,hetlft,homrgt,hetrgt)
这里,s为(/ncols,ntime/)的气象场,z为(/ncolz,ntime/), 二者都为float或者double。nsvd为计算的svd模态数。homlft,hetlft,homrgt,hetrgt分别为左同构场、左异构场、右同构场合右异构场。它们的属性如下:
homlft:(/nsvd,ncols/),typeof(s)
hetlft:(/nsvd,ncols/),typeof(s)
homrgt:((/nsvd,ncolz/),typeof(s)
hetrgt:((/nsvd,ncolz/),typeof(s)
时间系数为:
ak = onedtond(svd_rv@ak,(/nsvd,ntime/))
bk = onedtond(svd_rv@bk,(/nsvd,ntime/))
ak!0 = "sv"
ak!1 = "time"
bk!0 = "sv"
bk!1 = "time"
svdcov_sv:该命令与svdcov的区别在于,它只返回两个输入数据集相关联的左右奇异向量。
svdstd、svdstd_sv:它们与svdcov、svdcov_sv的区别在于,它们首先对输入的数组进行了标准化处理,然后再进行SVD计算,而svdcov、svdcov_sv不会对输入的数据进行标准化处理。
数据处理·机器学习·可视化
行业资讯·学习资料
长按关注不迷路