matlab里如何把一个矩阵相同列向量的列序号依次输出出来?

例如如下矩阵:
R = [1 1 1 0 0 0 0 0 0 0 0;
1 1 1 0 0 0 0 0 0 0 0;
1 1 1 0 0 0 0 0 0 0 0;
0 0 0 1 1 1 0 0 0 0 0;
0 0 0 1 1 1 0 0 0 0 0;
0 0 0 1 1 1 0 0 0 0 0;
0 0 0 0 0 0 1 0 0 0 0;
0 0 0 0 0 0 0 1 0 0 0;
0 0 0 0 0 0 0 0 1 0 0;
0 0 0 0 0 0 0 0 0 1 0;
0 0 0 0 0 0 0 0 0 0 1];
就希望输出{1,2,3},{4,5,6},{7},{8},{9},{10},{11}这样的结果

matlab中的unique 函数可以实现检查矩阵中有多少个不同的类型数组,具体实现如下:

[a, b, c] = unique(R, 'row', 'stable');
for i = 1:size(a,1)-1
pos{i} = b(i):b(i+1)-1;
end
%其中a就是不同行的类型;
%b就是a中对应在R中的起始行的位置;
%c就是R中每行对应在a中的检索值
%pos里面存的就是你要的结果。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-05
在matlab中让矩阵按某一列排列,需要用到排序算法对某一列数据排序,然后在排序算法的if判断句中,依次交换矩阵两行内容。
以题目中矩阵为例,可以利用冒泡法对第三列数据排序,实现程序如下:
a=[5 7 8;4 6 1;8 0 7];
n=length(a);b=[];
for i=1:n-1
for j=1:n-i
if(a(j,3)>a(j+1,3))
b=a(j,:);a(j,:)=a(j+1,:);a(j+1,:)=b;
end
end
end
disp(a)
相似回答