如何计算两个向量都具有给定值的位置数?

发布于 2024-11-02 06:02:26 字数 199 浏览 1 评论 0原文

假设 AB 是 2 个向量,其中 length(A) = length(B)AB 的所有元素都是 01。如何在 1 行中计算两个向量的值为 1 的位置数?

Say A and B are 2 vectors where length(A) = length(B).
All elements of A and B are either 0 or 1. How can I count in 1 line the number of positions where both vectors have the value 1?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凉风有信 2024-11-09 06:02:26

只需添加到解决方案列表中,您还可以进行点积,这将为您提供答案:

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.

sum(bitand())

tic;for i=1:1e4;sum(bitand(A,B));end;toc
Elapsed time is 64.111025 seconds.

Just to add to the list of solutions, you can also do the dot-product, which will give you the answer:

C=A'*B;            %'# here I've assumed A & B are both column vectors

This is also by far the fastest of the solutions posted.

Timing test

A=round(rand(1e5,1));
B=round(rand(1e5,1));

Dot-product

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.

sum(bitand())

tic;for i=1:1e4;sum(bitand(A,B));end;toc
Elapsed time is 64.111025 seconds.
喜你已久 2024-11-09 06:02:26

众多解决方案之一,使用 nnz 而不是 sum 来查找非零元素的数量:

nnz(A&B)

One of many solutions, using nnz instead of sum to find the number of non-zero elements:

nnz(A&B)
似狗非友 2024-11-09 06:02:26

这应该可以做到:

sum(bitand(A, B))

This should do it:

sum(bitand(A, B))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文