2017-10-13 11 views
-1

2つの異なるサイズの配列を比較して、一致した値の場所の別の配列と一致する値の配列を取得します。は2つの異なるサイズの配列を比較し、一致する値と場所の1つの別々の配列を取得します

私は、私は2つの配列を比較し、YPOSとYlocknewの同様の値が含まれており、また、マッチしたポイントのインデックス値が含まれている他の配列、別の配列を取得したい大きさの異なる二つの配列

Ylocknew = [0 1.0000 -4.3000 5.0000 -4.2000 7.0000 -7.4000 8.0000 1.0000 4.0000] 

Ypos   = [1  5  7  8 4] 

を持っています。

コード:

Ypos(end:numel(Ylocknew))=inf 
R_common =Ylocknew(Ylocknew==Ypos); 
I = find(Ylocknew==Ypos); 

出力期待値:

は、私は2新しい配列

Yposlocknew = [1 5 7 8 4] 
Yposloc = [2 4 6 8 10] 

使用されるアプローチが必要なインデックスについては

RST_intersection = (intersect(Ylocknew,Ypos)) Output for similar values : RST_intersection = [ 1 5 7 8] 

(私が試してみました):

RST_intersection = find(intersect(Ylocknew,Ypos)) 

結果が、私はこれを行うにしようとしています

RST_intersection =[ 1  2  3  4] 

(それは間違っている)が、それは私に空行列を与えていますサイズ1 * 0の

可能な限りループを使用せずにこれを行う簡単で簡単な方法は、私は多くの価値があるので、プロセスをスピードアップします。

+0

これは私がismemberで得ている結果ですが、間違ったismemberはこのコマンドを試した値を複製しています。そしてなぜこれが最後の終わり1がマッチしないのか私はYposとYlocknewをマッチさせて繰返しなしで行列を得る必要があるということですYposには値があり、これらの値が同じ順序で使用できる場所が必要です – Peter

答えて

1

ここに必要なのはintersectで、stableフラグです。 intersect(Ylocknew,Ypos)のすべての要素がゼロであるため、

[Yposlocknew, Yposloc] = intersect(Ylocknew,Ypos,'stable'); 

find(intersect(Ylocknew,Ypos))は間違いなくあなたに[1 2 3 4]を与えるだろう。

+0

ありがとうすぐに素晴らしい..素晴らしい答えとウルの助けと時間upvotedと受け入れてくれてありがとう。 – Peter

関連する問題