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

Скажите A и B - 2 вектора, где length(A) = length(B). Все элементы A и B имеют либо 0, либо 1. Как подсчитать в 1 строке количество позиций, где оба вектора имеют значение 1?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Просто, чтобы добавить в список решений, вы также можете сделать дот-продукт, который даст вам ответ:

C=A'*B;            %'# here I've assumed A & 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(A&B);end;toc
Elapsed time is 14.572747 seconds.

сумма (бит и ())

tic;for i=1:1e4;sum(bitand(A,B));end;toc
Elapsed time is 64.111025 seconds.
1 голос
/ 20 апреля 2011

Одно из многих решений, использующее nnz вместо sum, чтобы найти количество ненулевых элементов:

nnz(A&B)
0 голосов
/ 20 апреля 2011

Это должно сделать это:

sum(bitand(A, B))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...