# Processing large matrix faster

조회 수: 1(최근 30일)
Manolis Mylonakis 2022년 6월 19일
편집: Stephen23 2022년 6월 19일
Hello everyone
I need to procces a large matrix (10.104.485x3) called "M". The first two columns are longitude and latitude and the third column is sea depth. I want to trace the coordinates that have depth bigger than 80m. So I try to make a matrix called "coods" with all the corresponding coordinates. Here follows my code:
j=1;
for i=1:10104485;
if M(i,3)<-80
coods(j,1)=M(i,1); coods(j,2)=M(i,2);
j=j+1;
end
end
My problem is that the loop never seem to end. I tried pausing after 2 -3 hours and the "i" is still in the very beginning. My operational system has 8 gb Ram. Can anyone tell if I do something wrong, or If I can do anything to make the loop go faster.
Any help will be deeply appreciated, Thank's a lot in advance

댓글을 달려면 로그인하십시오.

### 채택된 답변

Stephen23 2022년 6월 19일
편집: Stephen23 2022년 6월 19일
Why are you using a loop? Use logical indexing:
X = M(:,3)<(-80);
coods = M(X,:);
##### 댓글 수: 1표시숨기기 없음
Manolis Mylonakis 2022년 6월 19일
Thank you so much, it works perfect.
Sorry but I as you can tell I am new to matlab

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

Bjorn Gustavsson 2022년 6월 19일
편집: Bjorn Gustavsson 2022년 6월 19일
This ought to be done in one go:
coods = M(:,M(:,3)<-80);
In the case you cannot do it in a vectorized way and cannot determine beforehand how big a matrix will be (which makes it impossible to pre-allocate the array), you should try to do the array-growing in blocks instead of element by element, say a couple of 1000 elements at a time and then crop the array down to size at the end.
HTH

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by