如何以坐标格式对稀疏矩阵的单元格数组进行逻辑索引?

时间:2013-11-06 04:54:35

标签: matlab cell-array

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

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

如果A是单元格数组[{row(int)} {col(int)} {val(string)}],在这种情况下如何执行与上面相同的逻辑索引?

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

这个怎么样:

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

这应该只保留第一列中的值大于或等于第二列中的值的行。您可以将x>=y比较更改为您想要的任何内容,包括字符串比较等。

答案 2 :(得分:0)

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

创建稀疏矩阵:

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

提取上三角部分:

>> triu(A)
ans =
   (1,2)        1