Разделить матрицу по значению в MATLAB - PullRequest
4 голосов
/ 13 апреля 2011

Интересно, есть ли решение MATLAB для разбиения матрицы на подматрицы, как показано ниже:

Матрица:

A =
16     2    3
5      11   10
9      7    6
4      14   15
5      1    3

Я хотел бы взять строки, которыеначиная с 5 на другую матрицу, те, которые начинаются с 16 на другую и т. д.

Есть ли функция для этого или я должен пойти с подходом if / for?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Вот одно решение, которое использует функции SORTROWS , UNIQUE , ACCUMARRAY и MAT2CELL для создания массива ячеек с каждой ячейкойхранение набора строк с одинаковым значением в первом столбце:

>> sortedA = sortrows(A,1);  %# Sort the rows by the first column
>> [~,~,uniqueIndex] = unique(sortedA(:,1));  %# Find indices of unique values
                                              %#   in the first column
>> cellA = mat2cell(sortedA,...                       %# Break matrix up by rows
                    accumarray(uniqueIndex(:),1),3);  %#   into a cell array
>> cellA{:}  %# Display the contents of the cells

ans =

     4    14    15

ans =

     5    11    10
     5     1     3

ans =

     9     7     6

ans =

    16     2     3
1 голос
/ 13 апреля 2011

Я думаю, что нашел это =)

for n=1:max(max(A))
M{n} = A(find(A(:,1)==n),:);
end

Теперь M{n} - это матрица всех строк, которые начинаются с n. =)

...