如何在python中生成稀疏正交矩阵?

时间:2018-02-01 11:45:46

标签: python sparse-matrix orthogonal

如何生成随机 稀疏正交矩阵?

我知道scipy库中有一个稀疏矩阵,但它们通常是非正交的。人们可以利用QR分解,但不一定能保留稀疏性。

1 个答案:

答案 0 :(得分:1)

我不能留下评论,但作为初步想法,您可以将矩阵划分为对角线块,用QR填充这些块,然后置换行/列。得到的矩阵将保持正交。或者,您可以为Q定义一些稀疏模式,并尝试将f(Q, xi)最小化为QQ^T=I,其中f是一些(最好)凸函数,通过随机变量添加熵xi。由于我还没有尝试过这两种方法,所以无法说出任何一种方法的功效。

编辑:关于第二种方法的更多信息。 f可以是任何功能。一种选择可能是非零元素与随机高斯向量(或任何其他随机变量)的相似性:f = ||vec(Q) - x||_2^2, x ~ N(0, sigma * I)。您可以使用任何通用约束优化器来处理此问题。问题当然是并非每个模式S都保证具有(满级)正交填充。如果你有记忆,L1正则化(或平滑近似)可以鼓励密集矩阵变量的稀疏性:g(Q) = f(Q) + P(Q)其中P是任何稀疏性诱导惩罚函数。看看文& Yen(2010)“一种可行的正交约束优化方法”,专门用于优化(密集)正交矩阵上的一般(可微)函数的算法和Liu,Wu,So(2015)“具有正交性约束的二次优化”对二次函数的几种线/弧搜索算法的更理论评估。如果内存有问题,您可以使用稀疏基追踪分别生成每个行/列,根据问题的性质,有许多算法。参见Qu,Sun和Wright(2015)“在子空间中寻找稀疏向量:使用交替方向的线性稀疏度”和Bian等人(2015)“用于高维数据分析的稀疏零空间基础追踪和分析字典学习”算法细节,尽管在这两种情况下,您都必须合并/替换约束以促进所有先前向量的正交性。

值得注意的是,稀疏QR算法将Q作为稀疏/结构矩阵的乘积返回。如果您只关心存储空间,这可能是创建大型高效正交运算符的最简单方法。