我有这个矩阵
1 2
1 3
1 4
2 1
2 2
3 1
从这个矩阵我想要一个这种类型的数据结构
1={2 3 4}
2 = {1 2}
3 = {1}
我怎样才能在matlab中有效地做到这一点?
答案 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)