svd奇异值分解_NCL专辑 | 奇异值分解(SVD)

c790a8ba7a87b148c57a6deb874e9d58.png

奇异值分解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不会对输入的数据进行标准化处理。

cddfc4c93f1b61f757e221dfde0460eb.png

数据处理·机器学习·可视化

行业资讯·学习资料

765999d51620699c0a86f3e32221cc02.png

长按关注不迷路

55c23ef9c13397e25af4ce75a800bddd.png