【发布时间】:2015-02-23 19:15:11
【问题描述】:
在 MATLAB 中,假设我有一组方阵,例如 A,trace(A)=0 如下:
例如,
A = [0 1 2; 3 0 4; 5 6 0]
如何删除零,然后垂直折叠矩阵,如下所示:
A_reduced = [1 2; 3 4; 5 6]
更一般地说,如果零可以出现在列中的任何位置(即,不一定在长对角线上)怎么办?当然,假设所有列的零总数相同。
矩阵可以很大(数百 x 数百维)。因此,将赞赏一种有效的方法。
【问题讨论】:
-
以前试过这个。这不维护矩阵结构 - 我指的是“垂直折叠矩阵”部分。
-
对不起。当我在原始帖子中使用 A' 时,我想我让你们很多人感到困惑。我的意思是表示改变/减少的A,而不是转置的A。我现在已将 A' 更改为 A_reduced。
-
不应该每行中的零数量相同,而不是问题中所述的每列中的零数量相同,以启用垂直折叠?像这样 -
A = [0 3 0 2; 3 0 0 1; 7 0 6 0; 1 0 6 0;0 16 0 9]? -
您能否使用具有
"total number of zeros for all columns are the same"条件的更随机样本并说明所需的输出?例如,像这样的东西每列都有两个零 -A = [0 3 7 1 0;3 0 0 0 6; 0 0 6 5 0;3 2 0 0 6],那么这种情况下的预期输出必须是什么? -
您的示例
A_reduced假设所有行 中的零数相同,然后您可以水平压缩。所以你的问题令人困惑。无论如何,我认为我的回答转换了两种可能性