比较两个长度不等的向量得到逻辑数组
我需要对以下代码进行向量化:
a = [1 2 3 2 3 1];
b = [1 2 3];
for i = 1:length(a)
for j = 1:length(b)
r(i, j) = (a(i) == b(j));
end
end
输出 r 应该是一个逻辑数组:
1 0 0
0 1 0
0 0 1
0 1 0
0 0 1
1 0 0
我能得到的最接近的是:
for j = 1:length(b)
r(:, j) = (a == b(j));
end
迭代较短的向量显然更有效,因为它生成的迭代次数更少。正确的解决方案应该没有任何 for 循环。
这在 MATLAB/Octave 中可能吗?
I need to vectorize the following code:
a = [1 2 3 2 3 1];
b = [1 2 3];
for i = 1:length(a)
for j = 1:length(b)
r(i, j) = (a(i) == b(j));
end
end
The output r should be a logical array:
1 0 0
0 1 0
0 0 1
0 1 0
0 0 1
1 0 0
The closest I can get is:
for j = 1:length(b)
r(:, j) = (a == b(j));
end
Iterating through the shorter vector is obviously more efficient as it generates fewer for iterations. The correct solution should have no for-loops whatsoever.
Is this possible in MATLAB/Octave?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是使用
bsxfun
的简单解决方案。Here's a simple solution using
bsxfun
.bsxfun(@eq, a', b)
bsxfun(@eq, a', b)