Group array in a cell according to their size

4 visualizaciones (últimos 30 días)
kix
kix el 5 de Jul. de 2020
Comentada: kix el 5 de Jul. de 2020
Hi everyone!
I've got a cell wich contains array like this : A={[1 2 3 4] [4 5 6 9] [1 2 3] [7 8 9] [1 2] [3 4]}
and I would like to group the arrays in this cell according to their size and get the indexes where they have been found in A and have the following result :
expected_result={{[1 2 3 4] [4 5 6 9]} {[1 2 3] [7 8 9]} {[1 2] [3 4]}}
idx_in_A={[1 2] [3 4] [5 6]}
Thanks in advance

Respuesta aceptada

Thiago Henrique Gomes Lobato
Thiago Henrique Gomes Lobato el 5 de Jul. de 2020
A direct implementation could be done like this:
A={[1 2 3 4] [4 5 6 9] [1 2 3] [7 8 9] [1 2] [3 4]};
sizes= [];
for idx=1:length(A)
Vsize = length(A{idx});
if ~ismember(Vsize,sizes)
sizes = [sizes,Vsize];
Pos = find(ismember(sizes,Vsize));
idx_in_A{Pos} = idx;
else
Pos = find(ismember(sizes,Vsize));
idx_in_A{Pos} = [idx_in_A{Pos},idx];
end
end
expected_result = cell(length(idx_in_A),1);
for idx= 1:length(idx_in_A)
expected_result{idx} = {A{idx_in_A{idx}}};
end

Más respuestas (1)

Sumeet Singh
Sumeet Singh el 5 de Jul. de 2020
You can use one containers.Map to group same sized arrays and another for storing the indices.

Categorías

Más información sobre Data Types en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by