MATLAB Answers

# Why 'for loop' is very slow even working on server

5 views (last 30 days)
Shakir Hussain on 20 Oct 2018
Commented: Shakir Hussain on 26 Oct 2018
My 'for loop' looks like
iwant = cell(a,b);
for i =1:17
c = data(:,:,i);
for j = 1:b
idx = inpolygon(X(:),Y(:),S(j).X , S(j).Y);
iwant{i,j} = c(idx);
end
end
Where a =17,c = 420*940, X = 420*940, Y = 420*940 and b = 1*1 which is polygon and its size is (shape_area 56.4087, x= 1*679340, y = 1*679340).
This for loop is taking very long time even days, so how could I execute it in minimum time
Thank you in advance for any kind of help

#### 1 Comment

madhan ravi on 20 Oct 2018
size(iwant)?

Sign in to comment.

### Accepted Answer

Walter Roberson on 20 Oct 2018
The idx results are the same for all i values for a given j. Loop over j precomputing them and then loop over i pulling out the appropriate entries.

#### 9 Comments

Show 6 older comments
Shakir Hussain on 23 Oct 2018
First I was trying execute the command with large size single merged polygon in which hundreds of small polygons (3075) were merged together and that was taking very long time. But when it unmerged the polygons and tried again and it was very quick to execute, so the speed issue is solved here.
But a new issue arise here as the output was disperse in 3075 pieces and I want to assemble it into single matrix having 17 rows and certain number of columns, so how I can do it?
Walter Roberson on 23 Oct 2018
I do not know what the individual entries in your cell array are intended to mean.
Shakir Hussain on 25 Oct 2018
The test data has attached here, which I want to convert into a matrix having 17 rows and columns according to data size. I was facing problem to attached sample data here from last few days

Sign in to comment.

### More Answers (1)

Bruno Luong on 20 Oct 2018

As I mention in another thread you can get on FEX that can be 100 times faster than MATLAB inpolygon, let alone the newy polyshape

#### 7 Comments

Show 4 older comments
Shakir Hussain on 25 Oct 2018
e.g test{1,6} has 10 element so I want to put theses 10 elements into 10 separate columns in serial and same rule applies on all. In result we will have much more columns than 3075. or Could we convert it into matrix (cell2mat is not working for it) or write as txt,csv or xlsx?
Walter Roberson on 25 Oct 2018
tt = cell2mat(cellfun(@transpose,test,'uniform',0));
Shakir Hussain on 26 Oct 2018
Thank you so much sir Walter

Sign in to comment.

Sign in to answer this question.

R2018a