how to solve *out of memory* error

  • Follow


Hi guys,
    I just started to use matlab. I got the *out of memory* error while I used the following commands:
load out.txt
[X,Y]=meshgrid(out(:,1),out(:,2));
Z=griddata(out(:,1),out(:,2),out(:,3),X,Y);
surf(X,Y,Z);
the out.txt is smaller than 300kb. And I am pretty sure that the memory available is big enough. Although I am not so sure how to check it. It would be great if someone could help me to find it out and solve this problem.
Thanks a lot.

wei
0
Reply Wei 5/24/2010 8:46:04 PM

How many elements are in the 'out' variable?  If it is N-by-3, then you should be aware that X,Y,Z are all N-by-N.  If N is very large, it is easy to see why you get such an error.  You may need to filter, for example:

out = out(1:2:end,:)
[X,Y] = ....

since you surf plot may not need such fine detail if N is very large.
0
Reply Matt 5/24/2010 8:55:20 PM


Hi Matt,
   Thanks for your reply.
   There are indeed N-by-3 elements in the out. I guess you have pointed out why would I have this problem. But I tried the filter you mentioned like below:
load out.txt
out = out(1:2:end,:);
[X,Y]=meshgrid(out(:,1),out(:,2));

it still gave me the *out of memory* error. Could you help me to figure it out, please? 
Thank you very much.

wei
0
Reply Wei 5/24/2010 11:31:20 PM

Wei wrote:

>    I just started to use matlab. I got the *out of memory* error while I 
> used the following commands:
> load out.txt
> [X,Y]=meshgrid(out(:,1),out(:,2));
> Z=griddata(out(:,1),out(:,2),out(:,3),X,Y);
> surf(X,Y,Z);

You do not need to create the grid for the purposes of griddata or surf:

load out.txt
z = griddata(out(:,1),out(:,2),out(:,3),out(:,1),out(:,2));
surf(out(:,1),out(:,2),Z);
0
Reply Walter 5/25/2010 3:27:01 AM

Hi Walter,
Thanks a lot for your attention.
But I think  if we want to use mesh or surf, we need to create our meshgrid, as
iin regular 2D plot when we want to plot sth against sth, right?
Anyway, I tried your way. I just got an empty plot...
0
Reply Wei 5/25/2010 4:05:22 AM

Wei wrote:

> Thanks a lot for your attention.
> But I think  if we want to use mesh or surf, we need to create our 
> meshgrid, as
> iin regular 2D plot when we want to plot sth against sth, right?

Newer versions of Matlab detect that a vector was given for x and y and 
treat it as if you had done a meshgrid() but without you having to 
actually create the matrix.

> Anyway, I tried your way. I just got an empty plot...

Which Matlab version are you using?
0
Reply Walter 5/25/2010 4:17:42 AM

Version 7.0.1.24704 (R14) Service Pack 1.
I guess it's too old...
0
Reply Wei 5/25/2010 4:26:04 AM

Wei wrote:
> Version 7.0.1.24704 (R14) Service Pack 1.
> I guess it's too old...

Please quote enough of the previous thread to establish context.

Yes, I suspect R14 is too old to support giving vectors instead of 
meshes for surf() and griddata.

You could work in sections, such as half of the x vs half of the y for 
the grid, and either put the four sections together into a single matrix 
for surf() or else do multiple surf() calls -- as long as you get the 
correct x and y coordinates and use "hold on" then in theory the 
surfaces should end up positioned next to each other. It _might_ help. 
But how big are your arrays? And I don't think I caught whether the 
memory error was in doing the meshgrid() or in doing the griddata ? You 
think you have enough memory, but it would be good to have someone else 
take a look at the figures. Use "who" to tell how big a variable is. If 
you are on a PC, try memstats() to see the amount of free memory you 
have available... it may well be significantly less than you thought.
0
Reply Walter 5/25/2010 4:48:06 AM

Walter Roberson <roberson@hushmail.com> wrote in message <bEIKn.37385$304.14325@newsfe12.iad>...
> Wei wrote:
> > Version 7.0.1.24704 (R14) Service Pack 1.
> > I guess it's too old...
> 
> Please quote enough of the previous thread to establish context.
> 
> Yes, I suspect R14 is too old to support giving vectors instead of 
> meshes for surf() and griddata.
> 
> You could work in sections, such as half of the x vs half of the y for 
> the grid, and either put the four sections together into a single matrix 
> for surf() or else do multiple surf() calls -- as long as you get the 
> correct x and y coordinates and use "hold on" then in theory the 
> surfaces should end up positioned next to each other. It _might_ help. 
> But how big are your arrays? And I don't think I caught whether the 
> memory error was in doing the meshgrid() or in doing the griddata ? You 
> think you have enough memory, but it would be good to have someone else 
> take a look at the figures. Use "who" to tell how big a variable is. If 
> you are on a PC, try memstats() to see the amount of free memory you 
> have available... it may well be significantly less than you thought.

The array is 3 by 128*128.
And the error was in doing the meshgrid.
Below is what I got for the memory:
    Physical Memory (RAM):
        In Use:                              918 MB (39677000)
        Free:                               1111 MB (457c2000)
        Total:                              2030 MB (7ee39000)
    Page File (Swap space):
        In Use:                              728 MB (2d8eb000)
        Free:                               3193 MB (c79b9000)
        Total:                              3922 MB (f52a4000)
    Virtual Memory (Address Space):
        In Use:                              323 MB (14323000)
        Free:                               1724 MB (6bcbd000)
        Total:                              2047 MB (7ffe0000)
    Largest Contiguous Free Blocks:
         1. [at 25075000]                    447 MB (1bf8b000)
         2. [at 41044000]                    413 MB (19d2c000)
         3. [at 11810000]                    311 MB (137f0000)
         4. [at 69d76000]                    125 MB (07d2a000)
         5. [at 629c9000]                    107 MB (06b37000)
         6. [at 5d12a000]                     88 MB (05896000)
         7. [at 73026000]                     29 MB (01d6a000)
         8. [at 5b8b5000]                     23 MB (017db000)
         9. [at 71c03000]                     19 MB (013fd000)
        10. [at 7e4a1000]                     18 MB (0124f000)
                                            ======= ==========
                                            1585 MB (6312f000)

Thanks a lot.
0
Reply Wei 5/25/2010 5:00:21 AM

Wei wrote:

>    Largest Contiguous Free Blocks:
>         1. [at 25075000]                    447 MB (1bf8b000)

That is your maximum array size. I calculate that is about a 3 x 4420 x 
4420 array, so I not immediately sure why your arrays do not fit. I 
suggest you put in

whos
memstats

right before your meshgrid() call, to see how much memory you have 
available at that point; also print out the size of "out" so you can 
calculate how big an array is being requested.
0
Reply Walter 5/25/2010 6:22:27 AM

9 Replies
722 Views

(page loaded in 0.069 seconds)

Similiar Articles:













7/22/2012 9:01:45 AM


Reply: