在矩阵中存储唯一元素的索引

时间:2014-03-15 14:55:37

标签: matlab sparse-matrix

我有这个矩阵

1 2
1 3
1 4
2 1
2 2
3 1

从这个矩阵我想要一个这种类型的数据结构

1={2 3 4}
2 = {1 2}
3 = {1}

我怎样才能在matlab中有效地做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用accumarray。将矩阵表示为M

[bb, ~, jj] = unique(M(:,1));
occ = accumarray(jj,M(:,2),[],@(v) {v(:).'});
result = [num2cell(bb) occ];

结果是一个2列的单元阵列。使用您的示例数据

>> result{:,1}
ans =
     1
ans =
     2
ans =
     3
>> result{:,2}
ans =
     2     3     4
ans =
     1     2
ans =
     1

答案 1 :(得分:0)

Unique几乎可以为您提供所需的信息:

[a,b,c]=unique(x)

其中a在这种情况下包含组[1,2,3],c表示行属于哪个组。现在你可以使用:

获得一行
x(c==1,2) %first row

将其放入arrayfun以获取所有行:

arrayfun(@(e)x(c==e,2),a,'UniformOutput',false)