Matlab 按行的最大值重新排列矩阵

Matlab 按行的最大值重新排列矩阵,matlab,Matlab,我试图写一个接受四个向量的函数。函数将向量“堆叠”在一起,以创建一个包含4行的矩阵。矩阵必须重新排列,以便数字最大的行位于顶部。然后,在三条底线中找出最大的数字,并将包含该数字的那一行放在顶部下方。然后,寻找两条底线中最大的数字,并放置从顶部开始包含第三位的那条线。 函数返回获得的矩阵 例如: v1=[1 2 3 4] v2=[5 6 7 8] v3=[9 10 11 12] v4=[13 14 15 16]; 输出应该是 m=[13 14 15 16; 9 10 11 12;

我试图写一个接受四个向量的函数。函数将向量“堆叠”在一起,以创建一个包含4行的矩阵。矩阵必须重新排列,以便数字最大的行位于顶部。然后,在三条底线中找出最大的数字,并将包含该数字的那一行放在顶部下方。然后,寻找两条底线中最大的数字,并放置从顶部开始包含第三位的那条线。 函数返回获得的矩阵

例如:

v1=[1 2 3 4] v2=[5 6 7 8] v3=[9 10 11 12] v4=[13 14 15 16];
输出应该是

m=[13 14 15 16;
    9 10 11 12;
       5 6 7 8; 
       1 2 3 4]
这就是我现在所做的,但它不能正常工作

function [ x ] = re( v1,v2,v3,v4 )

vec=[v1;v2;v3;v4];
[r,y]=size(vec);
h=[];
e=[];
l=[];
p=[];

a=sort(v1,'descend');
b=sort(v2,'descend');
c=sort(v3,'descend');
d=sort(v4,'descend');

elVector=[a(1),b(1),c(1),d(1)];

sortIt=sort(elVector,'descend');

for i=a:d
for j=1:r
if sortIt(1)==i(1)
  h=vec(j,1:y);

for ii=a:d
for jj=1:r
  if sortIt(2)==ii(1)
  e=vec(jj,1:y);

for iii=a:d
for jjj=1:r
  if sortIt(3)==iii(1)
  l=vec(jjj,1:y);

for iiii=a:d
for jjjj=1:r
  if sortIt(4)==iiii(1)
  p=vec(jjjj,1:y);


  end
end
end
  end
end
end
  end
end
end
end
end
end

x=[h;e;l;p];  
end`
编辑:关于评论中的矩阵示例 矩阵的结尾应如下所示:

x=

因此,向量的最大值在顶部,下一个最大值在第二行…(10,4,2,1)

现在,在我修复了之前编写的代码之后,它就可以工作了:

>

但我还是想知道matlab中是否有函数可以做到这一点。 谢谢你的帮助/

只需使用。。。例如,不需要嵌套循环和多重排序

A=[v1;v2;v3;v4]
B = flipud(sortrows(A))

B =
    13    14    15    16
     9    10    11    12
     5     6     7     8
     1     2     3     4
编辑:

您可以使用以下方法完成所需操作:

[~, IX]=sort(max(A')','descend')
然后


为什么flipud(sortrows(A))不能在这个矩阵上工作:w=01 0 0 0 10 0 0 0 0 0 2 0 4 0
w=[0 0 1 0;0 0 0 10 0;0 0 0 0 2;0 4 0 0 0]
flipud(sortrows(w))
可能不起作用,因为您实际上想要对列进行排序,而不是对行进行排序(),不管问题的标题是什么)-您给出的示例矩阵很难区分是哪个。尝试排序(w,'down')。
A=[v1;v2;v3;v4]
B = flipud(sortrows(A))

B =
    13    14    15    16
     9    10    11    12
     5     6     7     8
     1     2     3     4
[~, IX]=sort(max(A')','descend')
A(IX,:)

A(IX,:) =
     0     0    10     0
     0     4     0     0
     0     0     0     2
     0     0     1     0