MATLAB:计算多个数组中元素的重叠次数

MATLAB: Counting the number of overlaps of an element in multiple arrays

我有 2 个数组,其中

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

除了求和之外,您还可以用 nnz.[= 计算 非零 元素的 数量 。 16=]

nnz(A.*B)

它不会击败 and 解决方案,这个简单的小基准如何显示:

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

这样做的好处是,它也适用于值不只是零和一的数组。

假设行向量仅由 01 组成,您可以使用 矩阵乘法 ,这可能是最快的方法:

result = A*B.';