1

4 つのベクトルを受け入れる関数を作成しようとしています。この関数は、ベクトルを互いに「積み重ね」て、4 行の行列を作成します。最大数の行が一番上になるように、マトリックスを再配置する必要があります。次に、一番下の 3 つの行で最大の数を見つけ、それを含む行を一番上の行に配置します。次に、一番下の 2 番目の行を探し、上から 3 番目の場所を含む行を配置します。関数は取得した行列を返します。

例えば ​​:

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`

編集:コメントのマトリックスの例について

マトリックスは最後に次のようになります。

×=

 0     0    10     0
 0     4     0     0
 0     0     0     2
 0     0     1     0

そのため、一番上に最大値があり、2 行目に次に大きい値を持つベクトル..(10,4,2,1)。

以前に書いたコードを修正した後、今では動作します:

>

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

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

a=sort(vec(1,1:y),'descend');
b=sort(vec(2,1:y),'descend');
c=sort(vec(3,1:y),'descend');
d=sort(vec(4,1:y),'descend');

elVector=[a(1),b(1),c(1),d(1)];
sortIt=sort(elVector,'descend');

for i=1:length(elVector)

      if (sortIt(1))==elVector(i)
      h=vec(i,1:y);

      end

      if (sortIt(2))==elVector(i)
      e=vec(i,1:y);
      end

      if (sortIt(3))==elVector(i)
      l=vec(i,1:y);
      end

      if (sortIt(4))==elVector(i)
      p=vec(i,1:y);

      end
end

x=[h;e;l;p]; 
end

しかし、matlabにこれを行う関数があるかどうかを知りたいです。お手伝いありがとう/

4

1 に答える 1

2

...を使用するだけsortrowsなので、ネストされたループや複数の並べ替えは必要ありません。たとえば

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
于 2013-06-08T02:36:24.223 に答える