0

我正在使用一个15131x15131 的协方差矩阵,我想从这个没有任何零值的协方差矩阵中生成一个新的协方差矩阵。我希望新矩阵尽可能大。有没有办法在Python中做到这一点?

4

2 回答 2

1

为什么不直接删除所有包含零的行/列?那仍然应该产生一个协方差矩阵。由于矩阵表示变量之间的协方差,因此删除行/列类似于删除变量。顺序并不重要。

在 python (numpy) 中,你会这样做:

valid=np.all(A>0,1)
A=A[:,valid][valid,:]

请注意,此方法可能不会产生没有零的最大可能矩阵,但它保证您最终得到一个协方差矩阵。从您的问题中不清楚您是否希望结果矩阵成为同一组随机变量的协方差矩阵。

于 2013-07-25T02:21:59.170 回答
1

[编辑:正如评论者 Bitwise 所指出的,我在下面的主张是不正确的:协方差矩阵必须是对称的,平衡 biclique 问题的解决方案通常不对应于对称矩阵。我会把这个答案留在这里,以防它仍然有用。]

找到产生不包含零的方阵的行和列的子集等效于平衡 biclique 问题:构建一个二分图,其顶点集 V 由每行的一个顶点和每列的一个顶点组成,边在两个之间当且仅当该行和列的矩阵条目非零时,顶点。现在最大的非零子矩阵对应于该图中的最大 biclique(二分子图,其中顶点分区的一个部分中的每个顶点都是另一部分中每个顶点的邻居)。

不幸的是,这篇论文的第一页说这个问题已经被证明是 NP 难的,这意味着没有已知的有效算法。但是现在您知道了问题的名称,您可能能够挖掘出启发式解决方案,或者可能存在最坏情况的指数时间精确算法,但对于这种大小的数据集仍然是可行的。

于 2013-07-24T22:17:21.693 回答