Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中生成稀疏正交矩阵?_Python_Sparse Matrix_Orthogonal - Fatal编程技术网

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

如何在python中生成稀疏正交矩阵?,python,sparse-matrix,orthogonal,Python,Sparse Matrix,Orthogonal,如何生成随机稀疏正交矩阵 我知道scipy库中有稀疏矩阵,但它们通常是非正交的。可以利用QR分解,但它不一定保持稀疏性。初步设想,您可以将矩阵划分为对角块,用QR填充这些块,然后排列行/列。所得矩阵将保持正交。或者,您可以为Q定义一些稀疏模式,并尝试最小化f(Q,xi)服从QQ^T=I,其中f是一些(最好)凸函数,通过随机变量xi增加熵。因为我还没有真正尝试过这两种方法,所以我不能说这两种方法的有效性 编辑:关于第二种方法的更多信息f实际上可以是任何函数。一种选择可能是非零元素与随机高斯向量(或

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


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

初步设想,您可以将矩阵划分为对角块,用QR填充这些块,然后排列行/列。所得矩阵将保持正交。或者,您可以为
Q
定义一些稀疏模式,并尝试最小化
f(Q,xi)
服从
QQ^T=I
,其中
f
是一些(最好)凸函数,通过随机变量
xi
增加熵。因为我还没有真正尝试过这两种方法,所以我不能说这两种方法的有效性

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


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

第一个想法真的很有效,而且非常棒。但是你能在你的第二个想法中指定函数
f
,以便我更清楚地理解它吗?