我有一个向量A = [ 1 1 1 2 3 3 3 2 2 1 1 1 1 3 3 3 ]
。
我想找到每个元素的位置并将其存储在自己的矩阵中。
更具体地说,我想找到每个元素集的每个元素的位置,用m矩阵表示(其中m是元素的类型,n是在向量A中找到的元素的数量) )。
因此,例如,假设向量A中只有值1,2和3,我的矩阵的第一列将是1的值,并将读取(1,2,3,10, 11,12,13)和第二列,对于值2,将读取(4,8,9)和第三列,对于值3,将读取(5,6,7,14,15, 16)。
答案 0 :(得分:3)
这一班轮按预期工作:
B = accumarray(A', 1:length(A), [], @(x) {sort(x)})
B
是一个单元格数组,B{i}
包含i
所在索引的排序列表。
答案 1 :(得分:3)
这可能是一种方法 -
%// For each element create a pair: [R,C], where the first element R would
%// represent its index position in input array and C would be their uniqueness
[R,C] = find(bsxfun(@eq,A(:),unique(A(:).'))) %//'
%// Find lengths of each unique group
lens = diff([0 ; find(diff(C)) ; numel(C)])
%// Store each element into groups based on the uniqueness and whose
%// values would be the index positions i.e. taken from R
out = mat2cell(R(:).',1,lens)
针对给定输入的示例运行 -
>> A
A =
1 1 1 2 3 3 3 2 2 ...
1 1 1 1 3 3 3
>> celldisp(out)
out{1} =
1 2 3 10 11 12 13
out{2} =
4 8 9
out{3} =
5 6 7 14 15 16
答案 2 :(得分:1)
与Divakar's answer类似,但sort
[out,i] = sort(A);
out1 = diff(find([1,diff(out)]));
out2 = [out1,numel(A)-sum(out1(:))];
out3 = mat2cell(i,1,out2);
<强>结果:强>
A = [ 1 1 1 2 3 3 3 2 2 1 1 1 1 3 3 3 ]; %// input
>> celldisp(out3)
out3{1} =
1 2 3 10 11 12 13
out3{2} =
4 8 9
out3{3} =
5 6 7 14 15 16