给定一个矩阵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
(或其他一些填充)
我怎样才能获得这个?
答案 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))))