如何简化此MatLab代码?

时间:2017-01-23 19:38:40

标签: matlab for-loop simplify

我想知道是否有办法摆脱内部的for循环

for i = 1:size(VALUES)
    for k = 2:bins+1
        if VALUES(i) < Arr(k)
            answer_list(i) = find(Arr == Arr(k)) - 1;
            break
        end
    end
end

VALUES是一个包含2到4的100个双打的文件 Arr是一个包含4个值的数组,从VALUES分钟开始,步长为1,结束于VALUES最大 bins的长度为Arr - 1 answer_list是一列数字VALUES长,根据bins变量的大小保存离散值。

1 个答案:

答案 0 :(得分:2)

我认为这就是您所寻找的(在评论中是对代码中原始行的引用):

out = bsxfun(@lt,VALUES(:).',Arr(:)) % if VALUES(i) < Arr(k):
out2 = size(out,1)-cumsum(out,1); % find(Arr == Arr(k)) - 1;
answer_list = out2(end,any(out,1)).';

这取代了整个代码,而不仅仅是内循环。