Processing large matrix faster

5 次查看(过去 30 天)
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:
%M = readmatrix('Bathymetry_Data.txt');
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
Stephen23 2022-6-19
编辑:Stephen23 2022-6-19
Why are you using a loop? Use logical indexing:
M = readmatrix('Bathymetry_Data.txt');
X = M(:,3)<(-80);
coods = M(X,:);
  1 个评论
Manolis Mylonakis
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
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

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by