Как я могу подсчитать количество позиций, где оба моих вектора имеют заданное значение?

#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))