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
这样做的好处是,它也适用于值不只是零和一的数组。
假设行向量仅由 0
和 1
组成,您可以使用 矩阵乘法 ,这可能是最快的方法:
result = A*B.';
我有 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)
它不会击败
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
这样做的好处是,它也适用于值不只是零和一的数组。
假设行向量仅由 0
和 1
组成,您可以使用 矩阵乘法 ,这可能是最快的方法:
result = A*B.';