#matlab #vectorization
#matlab #векторизация
Вопрос:
Скажем, A
и B
— это 2 вектора, где length(A) = length(B)
. Все элементы A
и B
являются либо 0
, либо 1
. Как я могу посчитать в 1 строке количество позиций, где оба вектора имеют значение 1
?
Ответ №1:
Просто чтобы добавить в список решений, вы также можете выполнить скалярное произведение, которое даст вам ответ:
C=A'*B; %'# here I've assumed A amp; B are both column vectors
Это также, безусловно, самое быстрое из опубликованных решений.
Проверка времени
A=round(rand(1e5,1));
B=round(rand(1e5,1));
Точечное произведение
tic;for i=1:1e4;A'*B;end;toc %'SO formatting
Elapsed time is 0.621839 seconds.
nnz
tic;for i=1:1e4;nnz(Aamp;B);end;toc
Elapsed time is 14.572747 seconds.
сумма (bitand())
tic;for i=1:1e4;sum(bitand(A,B));end;toc
Elapsed time is 64.111025 seconds.
Ответ №2:
Одно из многих решений, использующее nnz
вместо sum
для нахождения количества ненулевых элементов:
nnz(Aamp;B)
Ответ №3:
Это должно сделать это:
sum(bitand(A, B))