Matlab加速或用find函数消除循环

Matlab加速或用find函数消除循环,matlab,performance,for-loop,Matlab,Performance,For Loop,只是为了找到另一种实现方式来摆脱这个for循环而苦苦挣扎。有没有办法摆脱慢换循环?谢谢你的帮助 list = randi(2000,[2000 1]); val = randi(2000,[2000 3000]); for ii = 1:length(list) [y,x] = find( val == list(ii) ); minx = min(x); maxx = max(x); minx1 = ceil(minx + 0.05 * (maxx - m

只是为了找到另一种实现方式来摆脱这个for循环而苦苦挣扎。有没有办法摆脱慢换循环?谢谢你的帮助

list = randi(2000,[2000 1]);
val = randi(2000,[2000 3000]);

for ii = 1:length(list)
    [y,x] = find( val  == list(ii) );
    minx = min(x);
    maxx = max(x);

    minx1 = ceil(minx + 0.05 * (maxx - minx ));
    maxx2 = ceil(maxx - 0.02 * (maxx - minx ));
    val(y,minx:minx1) = 0;
    val(y,maxx2:maxx) = 0;
end

你能在输出中描述一下你想要达到的目标吗?但无论如何,循环可以JIT编译,并且可能不会比矢量化解决方案慢多少?@Justin想将“val”拆分为单独的网格。也许有更好的方法来完成这一步:D。