我想知道是否有办法摆脱内部的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
变量的大小保存离散值。
答案 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)).';
这取代了整个代码,而不仅仅是内循环。