2012-05-13 18 views
0

私は、xと呼ばれる座標のベクトルを持っています。Matlab - 関係行列

a = find(x(:,2)==min(x(:,2))); % Contains indices 

これは、最小のy座標を持つ要素のインデックスを返します。要素* *と言うときは、これによって1つ以上の値が返されることがあります(たとえば(10,2)と(24,2)の両方が2のy座標を持ち、2が最小のy座標です。

とにかく、私の次のステップは、x座標に従ってmin y座標で要素をソート(昇順)することです。最初に私は:

上記の操作は、要素をmin y座標で並べ替えるかもしれないので、この並べ替えをaにも適用したいと思います。だから、私は何:同じx値を持つ要素が異なるyの値とがある場合

[v i] = ismember(b, x(:, 1)); 

残念ながら、これらの要素のいずれか(すなわち、B)次いで、上記マトリクスは、それを選択するのメンバーであることが判明しました。たとえば、(10,2)と(24,2)が最小のy座標を持つ要素であり、3番目の要素(24,13)がある場合は、上記の操作が混乱します。より良い方法がありますか?私はループを使用してスクリプトを書いて、すべてうまくいっていましたが、Matlabの方法論に沿って書き直しました。私はmatlabに慣れていないことがこのエラーを引き起こしているのではないかと心配しています。

答えて

1

申し訳ありませんが、私はあなたの質問を誤解しているかもしれないが、レムは、私はあなたがここに欲しいと思うものを言い直す: あなたは2Dのセットを持っている座標:

x = [24,2; 10,2; 24,13]; 

あなたは座標のペアが一緒に滞在したい(24、 2)(10,2)および(24,13)。そして、最小のy座標を持つ座標のペアを見つけたいと思います。倍数がある場合は、それらをx座標で並べ替える必要があります。そして、元の行列xにあった座標ペアの行インデックスが必要です。換言すれば、あなたが最終的な答えたい:私が正しく理解している場合

v = [10,2; 24,2]; 
i = [2,1]; 

を、これはあなたがそれを行うことができる方法である。

(注意:私は1つ以上のペアを持っているのxを変更(40 、13))IDX(i)と私の違いを説明するため

>> x = [40,13; 24,2; 10,2; 24,13]; 
>> idx = find(x(:,2)==min(x(:,2))) %Same as what you've done before. 

idx = 

    2 
    3 

>> [v,i] = sortrows(x(idx,:)) %Use sortrows to sort by x-coord while preserving pairings 

v = 

    10  2 
    24  2 


i = % The indices in x(idx,:) 

    2 
    1 

>> idx(i) %The row indices in the original matrix x 

ans = 

    3 
    2 

そして、これはあなたが望んでない場合は、最後に、あなたはあなたの答え[V、I]はであるべきだと思うものを示すことができますあなたが与えた例?

+0

これはまさに私の目的です。 sort(これはすでにyの値をソートしているので)でも行うことができます:[v i] = sort(x(idx、1)); idx(i); :)。 – s5s