我想知道是否有一个MATLAB解决方案将矩阵分割成子矩阵,如下所示:
矩阵是:
A =
16 2 3
5 11 10
9 7 6
4 14 15
5 1 3
我想把以5开头的行换成另一个矩阵,从16开始到另一个矩阵,等等。
是否有这样的功能,或者我应该使用if / for approach?
答案 0 :(得分:3)
这是一个使用函数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 :(得分:1)
我想我发现它=)
for n=1:max(max(A))
M{n} = A(find(A(:,1)==n),:);
end
现在M{n}
是以n
开头的所有行的矩阵。 =)