2

A次元 の Matlab の行列を考えてみましょうMxNA厳密な意味で最小から最大までの要素の同じ順序付けによって特徴付けられるの行を識別するアルゴリズムを構築するために、あなたの助けが必要です。ただし、等式と不等式の区別がないsortので使えません。sort

例を挙げて説明しましょう

clear
A=[1 -2 -4; ...
   0 -3  5;
   1  1  2
   1  2  3
   3  3  4
   10 7  11]; 

次の点に注意してください。

%A(1,3)<A(1,2)<A(1,1)  
%A(2,2)<A(2,1)<A(2,3)  
%A(3,1)=A(3,2)<A(3,3)  
%A(4,1)<A(4,2)<A(4,3)  
%A(5,2)=A(5,1)<A(5,3)  %equivalent to A(5,1)=A(5,2)<A(5,3)
%A(6,2)<A(6,1)<A(6,3)  

また、行 1 の順序 (厳密な意味で) は他の行の順序とは異なり、行 2 の順序は行 6 の順序と同じであり、行 3 の順序は行 3 の順序と同じです。行 5 のうち、行 4 の順序は他の行の順序とは異なります。

したがって、次の特徴を持つB次元のベクトルを提供するアルゴリズムが必要です。6x1

%B(2)=B(6) and ~= all other elements of B
%B(3)=B(5) and ~= all other elements of B
%B(1)~= all other elements of B
%B(4)~= all other elements of B

入力される実際の数値はB完全に任意です。たとえば、私は喜んで手に入れます

B=[3;...
  2;...
  1;...
  4;...
  1;...
  2];

sortうまくいかない理由を教えてください

[~,index] = sort(A,2);
[~,~,Bwrong]=unique(index, 'rows');

sort等号と不等号を区別しないため、行 3、4、5 は同じ順序であると識別されます。

A実際にはループが非常に大きいため、ループを使用しないことをお勧めします。

4

2 に答える 2