Вы можете сделать назначение в одной строке, используя ACCUMARRAY :
A = [1 4 5 2 2 2 2 1 1 5;
1 4 5 4 4 2 2 4 5 2;
3 3 3 3 4 1 3 5 3 4;
4 5 5 5 4 1 5 5 5 5
];
out = accumarray(A(3,:)', (1:size(A,2)), [], @(x){A(:,x)} );
При этом out{i}
содержит все столбцы A
, где третья строка A
равно i
(и пусто, если нет допустимого столбца).
Если вы хотите, чтобы out{i}
содержал столбцы, соответствующие i-му наименьшему уникальному значению в третьей строке A
,сначала вы можете использовать GRP2IDX из набора инструментов статистики:
[idx,correspondingEntryInA] = grp2idx(A(3,:)'); %'#
out = accumarray(idx, (1:size(A,2)), [], @(x){A(:,x)} );
Здесь out{i}
содержит столбцы, соответствующие correspondingEntryInA(i)
.