如何对矩阵子集进行向量化,使find()返回一个矩阵?

时间:2012-11-29 15:46:52

标签: matlab octave vectorization

给定一个矩阵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

(或其他一些填充)

我怎样才能获得这个?

2 个答案:

答案 0 :(得分: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

然后添加或逻辑或组合在一起。

(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

答案 1 :(得分:0)

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