0

xと呼ばれる座標のベクトルがあります。最小y座標の要素を取得したい:

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

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

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

b = sort(x(a,1));

上記の操作は、最小y座標で要素を再配置する可能性があるため、この再配置をaにも適用したいと思います。私もです:

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

残念ながら、x値は同じでy値が異なる要素があり、これらの要素の1つがa(つまり、b)のメンバーであることが判明した場合、上記の行列がそれを選択します。たとえば、(10,2)と(24,2)が最小のy座標を持つ要素であり、3番目の要素(24、13)がある場合、上記の操作が台無しになります。もっと良い方法はありますか?ループを使用してスクリプトを作成しましたが、すべて問題ありませんでしたが、Matlabの方法論に沿って書き直したため、matlabに慣れていないことがこのエラーの原因になっているのではないかと心配しています。

4

1 に答える 1

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];

私が正しく理解していれば、これはあなたがそれを行う方法です:

(注: idx(i) と i の違いを説明するために、x を (40,13) のペアをもう 1 つ持つように変更しました)

>> 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] がどうあるべきだと思うかを示してもらえますか?

于 2012-05-13T20:19:56.730 に答える