Vectorize a for loop
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi. How can I speed up the process of my for loop code.
function [missingCase] = CaseChecking(bimage)
missingCase = '';
for img = 1:66
mapList = xlsread('map.xlsx',img);
counter=0;
for i = 1:200
if (~bimage(mapList(i,2),mapList(i,1)))
counter=counter+1;
end
end
if counter<50
missingCase = img;
break
end
end
0 Kommentare
Antworten (2)
Andrei Bobrov
am 19 Mär. 2019
Please attach your data (bimage,map.xlsx - small example) as mat-file and xlsx-file.
ml = zeros(200,2,66);
for ii = 1:size(ml,3)
ml(:,:,ii) = xlsread('map.xlsx',ii);
end
mlw = permute(ml(:,end:-1:1,:),[1,3,2]);
out = find(~bimage(sub2ind(size(bimage),mlw(:,:,1),mlw(:,:,2))) < 50,'first',1);
Andrei Bobrov
am 19 Mär. 2019
Solution for attached data:
[~,sheets] = xlsfinfo('MapList.xlsx');
n = numel(sheets);
ml = cell(n,1);
for ii = 1:n
ml{ii} = xlsread('MapList.xlsx',ii);
end
jj = repelem((1:n)',cellfun('size',ml,1));
A = cat(1,ml{:});
k = accumarray(jj,(1:size(A,1))',[],...
@(x) sum(~bimage(sub2ind(size(bimage),A(x,2),A(x,1)))));
out = find(k < 50,'first',1);
2 Kommentare
Siehe auch
Kategorien
Mehr zu Environment and Settings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!