1

MATLAB には非常に大きな行列 (行列 A) があります。ここで、 2 番目の列に特定の値を含む行の行インデックスを見つけたいと思います。マトリックス A で探しているこれらの値は、別のマトリックス (マトリックス B) に格納され、行 (800 の数字) から構成されます。

さらに、同じ行列 A に対してこの計算をやり直したいのですが、サイズが異なる 10 個の異なる行列 (行列 A の異なる列で探している値が含まれています) に対してです。

行列のサイズのため、行列 B の te 値を含む行列 A の行を抽出するループが必要だと思います。これを行うにはどうすればよいですか?

よろしく、

迅速な返答に感謝致します!実際、この問題は、例がないと答えるのが少し複雑かもしれません。実際、重複したエントリはいくつかの問題を引き起こします。したがって、ここに例を示します

たとえば、単純化された行列 A があります。

1 2 3 4

9 9 9 9

4 3 2 1

そして、単純化された行列 (行) B: [9 3]

そして、単純化された行列 (行) C: [9 2]

次に、マトリックス D とマトリックス E を取得したいと思います。これらのマトリックスには、最初の列に元のマトリックス D(または E) の数値が含まれ、2 番目の列にマトリックス A のこの値の対応する行位置が含まれている必要があります。

したがって、行列 D =

9 2

3 3

行列 E =

9 2

2 3

この例で表されているように、マトリックス B とマトリックス C は、マトリックス A のいくつかの列 (9 列など) に存在するデータを含むことができます。ただし、行列 B は行列 A の列 2 で「検索」する必要があります。同様に、行列 C は行列 A の列 3 で「検索」する必要があり、例に示すように行列 D と E が生成されます。

4

2 に答える 2

0

largeDataIndex(行列の 2 列目) とinterestingIndex(b)の2 つのベクトルがあり、以下が必要であると仮定します。

For each value of interestingIndex , find the position in largeDataIndex 

次に、簡単な方法は次のとおりです。

result = zeros(size(interestingIndex))
for i = 1:length(result)
    result(i) = find(interestingIndex(i) == largeDataIndex)
end

これは、一致するエントリが常に 1 つだけであると想定していることに注意してください。それ以外の場合は、結果をベクトルではなくセル配列として定義する必要があります。

于 2013-02-05T13:59:11.883 に答える
0

Shai がコメントで述べたように、あなたの質問は非常に曖昧であり、多くの特殊なケースが発生する可能性があります (エントリの重複、A と B の相対的なサイズなど)。しかし、一般的に、私はあなたが望むことをするように見える小さなコードを試しました. 確かにそれを行うためのより迅速な方法があり、問題に関するより多くの情報がこれを最適化するのに役立つことは確かです.

colA=2;
% Example
nmax=10;
nA=5;
A=randi(nmax,[nA nA]);
nB=3;
B=randi(nmax,[1 nB]);
% Find rows
rows=cell(size(B));
for i=1:numel(B)
    rows(i)={find(A(:,colA)==B(i))};
end

入力/出力は次のとおりです。

A =
     3     7     8     5     4
     9     7     3     7     5
     8     2     9     9     8
     9     5     9     7     9
     3     3     4     6     8

B =
     1     7     5

rows =
     [0x1 double]    [1;2]    [4]
于 2013-02-05T13:53:07.560 に答える