比较两个不等长度的向量以获得逻辑数组

Sup*_*est 5 matlab vectorization octave

我需要矢量化以下代码:

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
Run Code Online (Sandbox Code Playgroud)

输出r应该是一个逻辑数组:

 1     0     0
 0     1     0
 0     0     1
 0     1     0
 0     0     1
 1     0     0
Run Code Online (Sandbox Code Playgroud)

我能得到的最接近的是:

for j = 1:length(b)
    r(:, j) = (a == b(j));
end
Run Code Online (Sandbox Code Playgroud)

迭代较短的向量显然更有效,因为它对迭代产生的更少.正确的解决方案应该没有任何for循环.

这在MATLAB/Octave中是否可行?

abc*_*bcd 8

这是一个简单的解决方案bsxfun.

bsxfun(@eq,b,a')

ans =

     1     0     0
     0     1     0
     0     0     1
     0     1     0
     0     0     1
     1     0     0
Run Code Online (Sandbox Code Playgroud)