1

matrix が与えられた場合A、値 1 と 2 に対応するインデックスを見つける必要があります。これは、次のように順番に行うことができます。

>> B

B =

     1     2     3
     4     1     6
     7     8     9
     4     5     1

>> find(B==1)

ans =

     1
     6
    12

>> find(B==2)

ans =

     5

しかし、この種の操作をループで行うと、Matlab はプロセッサの 1 つのコアしか使用しません。から行列を取得するために、どのようにベクトル化できfindますか? この結果が欲しい:

>> my_find( B, [1 2] )

ans =

    1 5
    6 0
   12 0

(または他のパディング)

どうすればこれを入手できますか?

4

2 に答える 2

6

使用しないでくださいfind

B==1

ans =

 1     0     0
 0     1     0
 0     0     0
 0     0     1

B==2

ans =

 0     1     0
 0     0     0
 0     0     0
 0     0     0

そして、それらを一緒に追加または論理ORします。

すなわち

(B==1) + (B==2)

ans =

 1     1     0
 0     1     0
 0     0     0
 0     0     1

また

(B==1) | (B==2)

ans =

 1     1     0
 0     1     0
 0     0     0
 0     0     1
于 2012-11-29T16:40:46.460 に答える
0

[i, j] = ind2sub(サイズ(B), find(logical(sum(bsxfun(@eq, B(:), [1 2]), 2))))

于 2012-11-29T15:55:44.270 に答える