3

2 つの列ベクトル [ab] と [cd] があります。「c」が「a」と対応する「b」値に一致する「a」のデータポイントのみを選択したいと考えています。「a」に繰り返しがあるため、「ismember」コマンドが正しく機能しません。「for ループ」も別のオプションですが、ループを作成するには列ベクトルのサイズが大きすぎます。以下に簡単な例を示します。解決策はありますか?ありがとう

[ab]

ans =

1.0000    0.1000
2.0000    0.2000
2.0000    0.2000
3.0000    0.4000
4.0000    0.5000

[CD]

ans =

 2     7
 3    12
4

3 に答える 3

2

私が正しく理解している場合、解決策は次から始めることです:

[a idx] = unique(a);
b = b(idx);

ismemberこのようにして、 a の重複した出現をすべて削除したので、またはのような通常のメソッドを使用できるようになりintersectました。

于 2013-01-04T17:36:39.917 に答える
1

の繰り返し値がa常にと同じ値にbなる場合は、の2番目の出力を使用ismemberして簡単な解決策を得ることができます。

ab=[1.0000    0.1000
2.0000    0.2000
2.0000    0.2000
3.0000    0.4000
4.0000    0.5000];
cd=[2     7
3    12];


[~,idx]=ismember(cd(:,1),ab(:,1))
out = ab(idx,:)

out =

    2.0000    0.2000
    3.0000    0.4000

の繰り返し値aが異なる値を持つ場合がありますb(たとえば、最初[2 0.2; 2 0.3]に呼び出す必要があります:uniquea

[~,idx] = unique(ab(:,1));
ab = ab(idx,:);
out = ab(ismember(ab(:,1),cd(:,1)),:); 
于 2013-01-04T17:51:38.650 に答える
1

あなたの質問は少し不明確でした。希望する出力は次のとおりです。

2.0000    0.2000
2.0000    0.2000
3.0000    0.4000

私はあなたの行列を次のように定義しました:

AB = [a b];
CD = [c d];

ismember の使用:

ismember(AB(:,1), CD(:,1)); % Compare first columns.

行番号が表示されます。このような:

 0
 1
 1
 1
 0

したがって、あなたがする必要があるのは次のとおりです。

AB(ismember(AB(:,1), CD(:,1)),:); % Get the entire corresponding row.

出力は次のようになります。

2.0000    0.2000
2.0000    0.2000
3.0000    0.4000
于 2013-01-04T16:05:08.640 に答える