元素的重疊數目我有2個陣列,其中MATLAB:計數在多個陣列
A = [1,0,0,1,1,0,1]
B = [1,0,1,1,0,0,1]
我想找到出現的1只出現在兩個陣列的數目(在這種情況下,3)。我如何去做這件事?
謝謝!
元素的重疊數目我有2個陣列,其中MATLAB:計數在多個陣列
A = [1,0,0,1,1,0,1]
B = [1,0,1,1,0,0,1]
我想找到出現的1只出現在兩個陣列的數目(在這種情況下,3)。我如何去做這件事?
謝謝!
你可以寫這樣的:
C=sum(A.*B);
使用all
可能是一個另類:
C = sum(all([A;B]))
可以使用&
爲好。這也適用於非零值。
sum(A&B)
ans = 3
而是總結的,你也可以算的非零 -elements的數與nnz
。
nnz(A.*B)
它不會打Adiel's和Luis 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之外的值的數組。
請問您可以添加我的方法嗎?我認爲你應該使用行(非列)向量作爲輸入,根據OP –
@LuisMendo我包含了所有的變化,是的,你的解決方案似乎是最快的! – thewaywewalk
謝謝!在Matlab中,矩陣乘法總是最快的:-) –
你能澄清你的要求是什麼?測試在特定索引處的「A」和「B」是否都是「1」? –
@Jon Surrell,是的,就是這樣。原來矩陣乘法運作完美! – wlfr