2015-05-26 81 views
2

元素的重疊數目我有2個陣列,其中MATLAB:計數在多個陣列

A = [1,0,0,1,1,0,1] 

B = [1,0,1,1,0,0,1] 

我想找到出現的1只出現在兩個陣列的數目(在這種情況下,3)。我如何去做這件事?

謝謝!

+0

你能澄清你的要求是什麼?測試在特定索引處的「A」和「B」是否都是「1」? –

+0

@Jon Surrell,是的,就是這樣。原來矩陣乘法運作完美! – wlfr

回答

5

你可以寫這樣的:

C=sum(A.*B); 
1

使用all可能是一個另類:

C = sum(all([A;B])) 
2

可以使用&爲好。這也適用於非零值。

sum(A&B) 

ans = 3 
3

而是總結的,你也可以算的非零 -elements的nnz

nnz(A.*B) 

它不會打Adiel'sLuis Mendo's解決方案,怎麼這個小古樸基準測試顯示:

A = randi(2,1,100000)-1; 
B = randi(2,1,100000)-1; 

f1 = @() nnz(A.*B); 
f2 = @() sum(A.*B); 
f3 = @() sum(A&B); 
f4 = @() sum(all([A;B])); 
f5 = @() A*B.'; %' 

t(1) = timeit(f1); 
t(2) = timeit(f2); 
t(3) = timeit(f3); 
t(4) = timeit(f4); 
t(5) = timeit(f5); 

t = 0.0005 %// thewaywewalk 
    0.0002 %// Adiel 
    0.0010 %// kkuilla 
    0.0026 %// Santhan Salai 
    0.0001 %// Luis Mendo 

它有一個好處,它的工作原理也具有除零和1之外的值的數組。

+0

請問您可以添加我的方法嗎?我認爲你應該使用行(非列)向量作爲輸入,根據OP –

+0

@LuisMendo我包含了所有的變化,是的,你的解決方案似乎是最快的! – thewaywewalk

+0

謝謝!在Matlab中,矩陣乘法總是最快的:-) –

4

假設行向量只包含01,你可以使用矩陣乘法,這可能是最快的方法:

result = A*B.'; 
+1

這很聰明.... – kkuilla

+0

做得很好:) +1 –

+0

如果你做'(1-(〜A))*(1-(〜B))會怎樣。 ');'對於包含除零以外的其他數字的矩陣?在我的機器上似乎很快...... – kkuilla