1

给定一个矩阵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 将只使用我处理器的一个内核。如何对其进行矢量化,以便从中获得矩阵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

然后将它们相加或逻辑或。

IE

(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(size(B), find(逻辑(sum(bsxfun(@eq, B(:), [1 2]), 2))))

于 2012-11-29T15:55:44.270 回答