0

A为坐标格式的稀疏矩阵[row(int) col(int) val(float)]。如果需要一个上三角稀疏矩阵A,则可以使用逻辑索引获得相同的结果,例如:

A = A(A(:,1) <= A(:,2), :);

如果 A 是 cell array [{row(int)} {col(int)} {val(string)}],在这种情况下如何执行与上述相同的逻辑索引?

4

3 回答 3

2

您可以使用cell2mat将单元格的一列转换为可用作索引列表的矩阵:

A={1,2,'top';2,1,'bottom'}
A = 
    [1]    [2]    'top'   
    [2]    [1]    'bottom'
>> A(cell2mat(A(:,1))<=cell2mat(A(:,2)),:)
ans = 
    [1]    [2]    'top'
于 2013-11-06T05:23:14.693 回答
1

How about this:

A = A(cellfun(@(x,y) x>=y, A(:,1),A(:,2)),:);

That should only keep the rows in which the value in the first column is greater than or equal to the value in the second column. You can change the x>=y comparison to anything you want, including string comparisons, etc.

于 2013-11-06T05:36:25.987 回答
0

为什么不使用 matlab 内置的稀疏矩阵格式?

创建一个稀疏矩阵:

>> A=sparse([1 2],[2 1],1,2,2)
A =
   (2,1)        1
   (1,2)        1

提取上三角部分:

>> triu(A)
ans =
   (1,2)        1
于 2013-11-06T05:03:30.363 回答