That is what I was assuming, but it still seems a little odd that
matplotlib generates
that large of a memory footprint. Loading the fits file into the
program using pyfits,
with the code only uses 19MB of real memory and 600MB of virtual
memory (strangly
adding the line img = hdu[1].data, increases this to 208MB/800MB).
Displaying images of various sizes I get these
numbers from Activity Monitor
Size Real Mem Virtual
3k x 3k 0.68GB 1.57GB
4k x 4k 0.92GB 1.80GB
5k x 5k 1.20GB 2.10GB
5.5k x 5.5k 1.38GB 2.28GB
And the limit seems to be somewhere just above 5.5k by 5.5k (darn :( )
Cheers
Tommy
On Jun 30, 2009, at 7:27 PM, Perry Greenfield wrote:
> Because the image is so large, and matplotlib carries out various
> operations on the image (scaling, resampling, etc), it uses a lot of
> memory. This is one area where a specialized display program will be
> more efficient. If you need to use matplotlib, decide whether you
> really only want to display a subsection, or only need a lower
> resolution version (e.g., boxcar smooth and subsample) before
> displaying. I've found that image sizes well over 1kx1k can take
> some time to display, and those that are much larger can cause you
> to run out of memory. At least, that's what I think is happening.
>
> Perry
>
> On Jun 30, 2009, at 7:20 PM, Tommy Grav wrote:
>
>> I am trying to use imshow to plot some semi-large fits images.
>> Here is the code:
>>
>> from math import *
>> import numpy as np
>> from matplotlib import pyplot as plt
>> from matplotlib import cm as cm
>> import pyfits
>>
>> cat = "/Volumes/Sweden/PS1SC/Data/PS20090603-3/MD09/skycell.092/"
>> fname = "o4985g0263o.warp.MD09.skycell.092"
>>
>> hdu = pyfits.open(cat+fname+".fits")
>> print hdu.info()
>> img = hdu[1].data.astype("int")
>>
>> plt.figure(figsize=[12,12])
>> plt.imshow(img,cmap=cm.cool)
>> plt.savefig("test.png")
>>
>> Which gives the result:
>>
>> Filename: /Volumes/Sweden/PS1SC/Data/PS20090603-3/MD09/skycell.092/
>> o4985g0263o.warp.MD09.skycell.092.fits
>> No. Name Type Cards Dimensions Format
>> 0 PRIMARY PrimaryHDU 6 () int16
>> 1 CompImageHDU 101 (6000, 6000) float32
>> None
>> Python(23117,0xa04f2720) malloc: *** mmap(size=1152000000) failed
>> (error code=12)
>> *** error: can't allocate region
>> *** set a breakpoint in malloc_error_break to debug
>> Traceback (most recent call last):
>> File "quick_look.py", line 16, in <module>
>> plt.savefig("test.png")
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/pyplot.py", line 345, in savefig
>> return fig.savefig(*args, **kwargs)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/figure.py", line 990, in savefig
>> self.canvas.print_figure(*args, **kwargs)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/backend_bases.py", line 1419, in
>> print_figure
>> **kwargs)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/backends/backend_agg.py", line
>> 323,
>> in print_png
>> FigureCanvasAgg.draw(self)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/backends/backend_agg.py", line
>> 279,
>> in draw
>> self.figure.draw(self.renderer)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/figure.py", line 772, in draw
>> for a in self.axes: a.draw(renderer)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/axes.py", line 1545, in draw
>> im.draw(renderer)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/image.py", line 233, in draw
>> im = self.make_image(renderer.get_image_magnification())
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/image.py", line 180, in make_image
>> x = self.to_rgba(self._A, self._alpha)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/cm.py", line 79, in to_rgba
>> x = self.cmap(x, alpha=alpha, bytes=bytes)
>> File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
>> python2.5/site-packages/matplotlib/colors.py", line 501, in __call__
>> rgba = np.empty(shape=xa.shape+(4,), dtype=lut.dtype)
>> MemoryError
>>
>> I found the earlier thread of
>> http://www.mail-archive.com/[email protected]/msg11216.html
>> but that didn't seem to produce any fixes or good explanations.
>>
>> I am on a Mac Pro Intel machine running 10.5.7 and
>> [Heimdall:tgrav ~/Work/myCode/Python/pyPS1SC]> python
>> ActivePython 2.5.4.3 (ActiveState Software Inc.) based on
>> Python 2.5.4 (r254:67916, Jan 20 2009, 14:11:42)
>> [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
>> Type "help", "copyright", "credits" or "license" for more
>> information.
>>>>> import numpy
>>>>> numpy.__version__
>> '1.3.0rc2'
>>>>> import pyfits
>>>>> pyfits.__version__
>> '2.1.1dev462'
>>>>> import matplotlib
>>>>> matplotlib.__version__
>> '0.98.5.2'
>>>>>
>>
>> Cheers
>> Tommy
>>
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Matplotlib-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users