我有一个庞大的稀疏矩阵,我正在研究,但为了简单起见,我在下面写了如下所示:
row = [1,3];
col = [1,3];
val = [22,33];
B = sparse(row,col,val,3,3)
22 0 0
0 0 0
0 0 33
这个矩阵是单数的,并且没有可用于解决方案的逆矩阵:
[A]=[B][C]
=> [B]\[A] = [C]
。
要解决此问题,需要删除仅包含零的所有行和列。因此,在上面的示例中,我将在创建稀疏矩阵之前删除第2行和第2列。
但是如果我试试这个,行和col矢量(3,3)描述的索引将指向矩阵维度之外并给我一个错误。 我可以做些什么来解决这个问题?
答案 0 :(得分:1)
您可以先按照自己的方式构建矩阵,然后使用以下内容删除空行和列
C = B(any(B, 2), any(B, 1));
这是非常有效的(空间),因为应用于稀疏矩阵的any
产生稀疏结果,并且上面的索引操作产生C
,其也稀疏< / p>
虽然,根据您的问题,这不能保证非奇异矩阵。
<强>更新强>
如果要删除行或列,如果行和相应的列都为零(以保持矩阵平方)
tokeep = any(B, 2).' | any(B, 1);
C = B(tokeep, tokeep);
答案 1 :(得分:0)
可能的解决方案
row = [1,3];
col = [1,3];
val = [22,33];
[ur,~,u_row] = unique(row);
[uc,~,u_col] = unique(col);
B =sparse( u_row,u_col,val,numel(ur),numel(uc));