>> 6 : ax.images
>> 7 : im = imshow(data)
>> 8 : ax.images
>> 9 : ax.images.remove[0]
>> 10: del ax.images.remove[0]
> 
> Both of these lines are wrong.  You either need to do
> 
>   ax.images.remove(0)  # note the parens, not square brackets
> 
> or
> 
>  del ax.images[0]

*doh*, of course, me stupid. Sorry, it's very very hot here. :)
> 
> Also, you are mixing API calls, eg
> 
>   ax = fig.add_subplot(111)
> 
> with pyplot call, eg
> 
>   im = imshow(data)
> 
> While this isn't a bug in this case, it is not good form.  The pyplot
> calls manage stateful information like current image and current axes,
> and you are safer using all pyplot or all api.  So for pure pyplot:
> 
>   subplot(111)
>   imshow(data)
> 
> or pure API:
> 
>   ax = fig.add_subplot(111)
>   ax.imshow(data)

Yeah, sorry, i thought it wouldn't matter, as i did not need an image 
object for this demo.
> 
> 
>> Even so i set hold(False), and the ax.images array does not increase,
>> the memory consumption increases.
>> 
>> I used these commands:
>> 
>> 3 : fig = figure()
>> 4 : ax = fig.add_subplot(111)
>> 5 : imshow(data)
>> 6 : ax.images
>> 7 : hold(False)
>> 8 : imshow(data)
>> 9 : ax.images
>> 
>> At step 6 I had 1 image in the ax.images array, at step 9 still only 1,
>> but RealMem went up the approx same amount between 7 and 8 then it did
>> between 4 and 5.
> 
> 
> I don't see this -- try using gc.collect() if you think you see a leak
> and use cbook.report_memory to get a measure of consumed memory.  If
> you still think you have a leak, try and build a complete
> free-standing script that replicates it.

I only can reproduce it inside a pylab session, as you see here:

IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

  Welcome to pylab, a matplotlib-based Python environment.
  For more information, type 'help(pylab)'.

In [1]: import gc

In [2]: gc.collect?
Type:           builtin_function_or_method
Base Class:     <type 'builtin_function_or_method'>
String Form:    <built-in function collect>
Namespace:      Interactive
Docstring:
    collect([generation]) -> n

    With no arguments, run a full collection.  The optional argument
    may be an integer specifying which generation to collect.  A ValueError
    is raised if the generation number is invalid.

    The number of unreachable objects is returned.


In [3]: import matplotlib.cbook as cbook

In [4]: data = ones((1500,1500,3))

In [5]: imshow(data)

Out[5]: <matplotlib.image.AxesImage object at 0x1c57610>

In [6]: ax =gca()

In [7]: cbook.report_memory()

Out[7]: 175384

In [8]: hold(False)

In [9]: len(ax.images)

Out[9]: 1

In [10]: imshow(data)

Out[10]: <matplotlib.image.AxesImage object at 0x1416430>

In [11]: cbook.report_memory()

Out[11]: 254624

In [12]: len(ax.images)

Out[12]: 1

In [13]: gc.collect()

Out[13]: 12


Don't know what to do with the 12 though?


If I do the same with a script like this:
from matplotlib.pylab import *
import matplotlib.cbook as cbook

data = ones((1500,1500,3))
imshow(data)
ax = gca()
print cbook.report_memory()
print len(ax.images)
hold(False)
imshow(data)
print cbook.report_memory()
print len(ax.images)
imshow(data)
print cbook.report_memory()
print len(ax.images)
imshow(data)
print cbook.report_memory()
print len(ax.images)
imshow(data)
print cbook.report_memory()
print len(ax.images)

This is what happens:
81920
1
82028
1
82128
1
82128
1
82132
1
So it's fine here.
So what's wrong with my ipython/pylab? :(

BR,
Michael



------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to