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中是否可行?
这是一个简单的解决方案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)