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

How to generate sparse orthogonal matrix in python?

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

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

作为初步想法,您可以将矩阵划分为对角线块,用 QR 填充这些块,然后置换 rows/columns。生成的矩阵将保持正交。或者,您可以为 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 是任何诱导稀疏性的惩罚函数。查看 Wen & Yen (2010) "A feasible Method for Optimization with Orthogonality Constraints" 了解专门设计用于优化(稠密)正交矩阵上的一般(可微分)函数的算法,以及 Liu, Wu, So (2015) "Quadratic Optimization with Orthogonality Constraints" 了解更多理论评估几种 line/arc 二次函数搜索算法。如果内存有问题,您可以使用稀疏基础追踪单独生成每个 row/column,根据您的问题的性质,有很多算法。有关算法详细信息,请参阅 Qu、Sun 和 Wright (2015) "Finding a sparse vector in a subspace: linear sparsity using alternate directions" 和 Bian 等人 (2015) "Sparse null space basis pursuit and analysis dictionary learning for high-dimensional data analysis",但在这两种情况下,您都必须 incorporate/replace 约束以促进与所有先前的正交性载体。

还值得注意的是,有稀疏 QR 算法 return Q 作为 sparse/structured 矩阵的乘积。如果您只关心存储 space,这可能是创建大型高效正交运算符的最简单方法。