-5

1000 個の値 A = [1000 個の値] を持つベクトル A と、MxN : B = MxN である行列 B があるとします。

B から A に表示される値のみを選択し、M 行と列数が等しい行列を作成するにはどうすればよいですか?

また、これは相互情報量を使用した分類に関する質問です。「A」には相互情報が含まれ、「B」にはテスト データセットが含まれます

編集: A の値は、サイズが 500x 1001 の別のデータセットの相互情報アルゴリズムから導出されます。500 はサンプル数、1000 は特徴ベクトル サイズです。最初の列は各サンプルのクラスです。マトリックス B は、特徴ベクトルを含むテスト サンプルのみで構成され、クラスは含まれません。

4

2 に答える 2

2

に表示さismemberれる のメンバーを検索するために使用します。BA

ismember(B, A)

結果は と同じ次元の論理マスクであり、B必要に応じて操作できます。Bに表示される要素のみを含むの行を保持するには、次の操作Aを行います。

Bnew = B(all(ismember(B, A), 2), :)

浮動小数点数の処理

データに浮動小数点数が含まれている場合、浮動小数点比較が不正確であるため、このアプローチは失敗する可能性があります ( Amroismemberが指摘したように)。したがって、これを行う別の方法を次に示します(私の別の回答に似ています)。これは、浮動小数点数に対して堅牢です。

x = reshape(b, 1, 1, []);
idx = reshape(any(abs(bsxfun(@minus, x, a)) < eps, 2), size(b));
Bnew = B(idx);

基本的にこれはワンライナーですが、わかりやすくするために 2 つのコマンドに分割しました。

  • x3 番目の次元に沿って連結された、検索対象のターゲット値です。
  • bsxfunから各値を順番に減算しa、結果の大きさをいくつかの小さなしきい値 (たとえばeps) と比較します。
  • idx結果の論理ベクトルは、 の次元を持つ行列に再形成され、bに表示される値を選択するためのインデックス行列として機能しますA
于 2013-05-23T11:45:53.443 に答える
2

Aに表示されるBの値のみを選択するにはどうすればよいですか...

ismemberそのために関数を使用できます。

...そして、M行と同じ数の列の行列を作成しますか?

B の各行には、A と同じ量の要素が含まれていると確信していますか? そうでない場合、これは機能しません。

于 2013-05-23T11:28:59.810 に答える