I tried adding vmin & vmax the the imshow call but I still get a MemoryError.
The grid file is 1.15 GB and I have ~4.5 out of 8 GB of memory available when I launch ipython, 3.5 when I execute imshow and 2 when I execute plt.draw().
im = ax.imshow(data, aspect=((data.shape[1])/float(data.shape[0])), interpolation=None, vmin=-400., vmax=3000.)
···
On Sep 7, 2012, at 4:25 PM, Benjamin Root wrote:
On Fri, Sep 7, 2012 at 8:44 AM, Shahar Shani-Kadmiel <kadmiel@…4191…> wrote:
-
an ipython session is invoked with qtconsole --pylab
-
I load a large NetCDF grid (Grid file format: nf (# 18) GMT netCDF format (float) (COARDS-compliant) [DEFAULT]), approx. 1.15 GB
-
I then try to plot with imshow the data
added below are the lines leading up to the error and the error itself.
This is running on OS X 10.7.4 with a recently installed EPD 7.3.
{code}
from scipy.io import netcdf_file as netcdf
data = netcdf(‘srtm_43_44_05_06_07_08.grd’,‘r’).variables[‘z’][::-1]
fig, ax = subplots()
data.shape
Out[5]: (24004, 12002)
im = ax.imshow(data, aspect=((data.shape[1])/float(data.shape[0])), interpolation=‘none’)
MemoryError Traceback (most recent call last)
in ()
----> 1 im = ax.imshow(data, aspect=((data.shape[1])/float(data.shape[0])), interpolation=‘none’)
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs)
6743 im.set_clim(vmin, vmax)
6744 else:
→ 6745 im.autoscale_None()
6746 im.set_url(url)
6747
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/cm.py in autoscale_None(self)
281 if self._A is None:
282 raise TypeError('You must first set_array for mappable')
→ 283 self.norm.autoscale_None(self._A)
284 self.changed()
285
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/colors.py in autoscale_None(self, A)
889 ' autoscale only None-valued vmin or vmax'
890 if self.vmin is None:
→ 891 self.vmin = ma.min(A)
892 if self.vmax is None:
893 self.vmax = ma.max(A)
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/ma/core.pyc in min(obj, axis, out, fill_value)
5873 def min(obj, axis=None, out=None, fill_value=None):
5874 try:
→ 5875 return obj.min(axis=axis, fill_value=fill_value, out=out)
5876 except (AttributeError, TypeError):
5877 # If obj doesn’t have a max method,
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/ma/core.pyc in min(self, axis, out, fill_value)
5054 # No explicit output
5055 if out is None:
→ 5056 result = self.filled(fill_value).min(axis=axis, out=out).view(type(self))
5057 if result.ndim:
5058 # Set the mask
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/ma/core.pyc in filled(self, fill_value)
3388 return self._data
3389 else:
→ 3390 result = self._data.copy()
3391 try:
3392 np.putmask(result, m, fill_value)
MemoryError:
{/code}
This is more a NumPy issue than anything else. We need to know the min and the max of the array in order to automatically scale the colormap for display. Therefore, we query the array object for its min/max. Because we support masked arrays, the array is first cast as a masked array, and then these queries are done.
It appears that in numpy’s masked array module, it calculates the array’s min by making a copy of itself first. I would have figured that it would have done its task differently. In the meantime, I suspect you can work around this problem by explicitly setting the vmin/vmax keyword arguments to imshow if you know them. Therefore, there should be no need to determine the array’s min/max in this inefficient manner.
Ben Root
MemoryError Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
53 def draw_wrapper(artist, renderer, *args, **kwargs):
54 before(artist, renderer)
—> 55 draw(artist, renderer, *args, **kwargs)
56 after(artist, renderer)
57
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/figure.py in draw(self, renderer)
882 dsu.sort(key=itemgetter(0))
883 for zorder, func, args in dsu:
→ 884 func(*args)
885
886 renderer.close_group('figure')
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
53 def draw_wrapper(artist, renderer, *args, **kwargs):
54 before(artist, renderer)
—> 55 draw(artist, renderer, *args, **kwargs)
56 after(artist, renderer)
57
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/axes.py in draw(self, renderer, inframe)
1981
1982 for zorder, a in dsu:
→ 1983 a.draw(renderer)
1984
1985 renderer.close_group(‘axes’)
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
53 def draw_wrapper(artist, renderer, *args, **kwargs):
54 before(artist, renderer)
—> 55 draw(artist, renderer, *args, **kwargs)
56 after(artist, renderer)
57
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/image.py in draw(self, renderer, *args, **kwargs)
353 warnings.warn("Image will not be shown correctly with this backend.")
354
→ 355 im = self.make_image(renderer.get_image_magnification())
356 if im is None:
357 return
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/image.py in make_image(self, magnification)
573 im, xmin, ymin, dxintv, dyintv, sx, sy = \
574 self._get_unsampled_image(self._A, [_x1, _x2, _y1, _y2],
→ 575 transformed_viewLim)
576
577 fc = self.axes.patch.get_facecolor()
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/image.py in _get_unsampled_image(self, A, image_extents, viewlim)
200 else:
201 if self._rgbacache is None:
→ 202 x = self.to_rgba(self._A, self._alpha, bytes=True)
203 self._rgbacache = x
204 else:
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/cm.py in to_rgba(self, x, alpha, bytes)
211 pass
212 x = ma.asarray(x)
→ 213 x = self.norm(x)
214 x = self.cmap(x, alpha=alpha, bytes=bytes)
215 return x
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/colors.py in call(self, value, clip)
843 clip = self.clip
844
→ 845 result, is_scalar = self.process_value(value)
846
847 self.autoscale_None(result)
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/colors.py in process_value(value)
829 if result.dtype.kind == 'f':
830 if isinstance(value, np.ndarray):
→ 831 result = result.copy()
832 elif result.dtype.itemsize > 2:
833 result = result.astype(np.float)
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/numpy/ma/core.pyc in call(self, *args, **params)
2449 mask = instance._mask
2450 cls = type(instance)
→ 2451 result = getattr(data, methodname)(*args, **params).view(cls)
2452 result._update_from(instance)
2453 if result.ndim:
MemoryError: