SourceForge logo
SourceForge logo
Menu

[matplotlib-devel] masked_array/matplotlib issue with memmaps

From: Christopher B. <cb...@be...> - 2008年02月26日 23:26:35
If I initialize an AxesImage using a np.zeros array and then set the
axes data later to a np.memmap array, I get a RuntimeError when
matplotlib tries to autoscale the image. The errors continue to fill
my console and I'm forced to close the shell. This bug was introduced
when I switched from numpy v1.0.3.1 to the trunk v1.0.5.dev4815
The two hacks to get around this are:
1) Setting any array element to something other than zero fixes the error:
 zdata[0,0] = 1
2) Specify the extent and max/min values when creating the image:
 imgaxes = pylab.imshow(zdata, extent=(0, data_shape[1],
data_shape[0], 0), vmin=0, vmax=1)
Unfortunately, due to the way this errors I'm having a difficult time
debugging it. I'm hoping someone with in-depth knowledge of
masked_arrays will have some insight.
Code and output are below.
Thanks!
Chris
---- script to reproduce the bug ----
import pylab
import numpy as np
def printinfo(imgaxes):
 a = imgaxes.get_array()
 print '\nimgaxes array info:'
 print 'type', type(a)
 print 'shape', a.shape
 print 'dtype', a.dtype
 print 'has _mmap', hasattr(a, '_mmap')
data_type = 'float32'
data_shape = (30, 40)
zdata = np.zeros(data_shape, dtype=data_type)
#zdata[0,0] = 1 # No exception raised if this line is executed
imgaxes = pylab.imshow(zdata)
printinfo(imgaxes)
mmdata = np.memmap('foo.dat', dtype=zdata.dtype, shape=zdata.shape, mode='w+')
imgaxes.set_data(mmdata)
printinfo(imgaxes) # imgaxes array now has a _mmap
pylab.show()
---- version info ----
In [2]: pylab.matplotlib.__version__
Out[2]: '0.91.2'
In [4]: numpy.version.version
Out[4]: '1.0.5.dev4817'
---- error ----
In [26]: run memmap_reassign.py
imgaxes array info:
type <class 'numpy.ma.core.MaskedArray'>
shape (30, 40)
dtype float32
has _mmap False
imgaxes array info:
type <class 'numpy.ma.core.MaskedArray'>
shape (30, 40)
dtype float32
has _mmap True
Exception exceptions.RuntimeError: 'maximum recursion depth exceeded'
in ignored
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (10, 0))
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/backends/backend_wx.pyc
in _onPaint(self, evt)
 1079 self.realize()
 1080 # Render to the bitmap
-> 1081 self.draw(repaint=False)
 1082 # Update the display using a PaintDC
 1083 self.gui_repaint(drawDC=wx.PaintDC(self))
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/backends/backend_wxagg.pyc
in draw(self, repaint)
 59 """
 60 DEBUG_MSG("draw()", 1, self)
---> 61 FigureCanvasAgg.draw(self)
 62
 63 self.bitmap =
_convert_agg_to_wx_bitmap(self.get_renderer(), None)
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/backends/backend_agg.pyc
in draw(self)
 356
 357 self.renderer = self.get_renderer()
--> 358 self.figure.draw(self.renderer)
 359
 360 def get_renderer(self):
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/figure.pyc
in draw(self, renderer)
 622
 623 # render the axes
--> 624 for a in self.axes: a.draw(renderer)
 625
 626 # render the figure text
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/axes.pyc in
draw(self, renderer, inframe)
 1303 mag = renderer.get_image_magnification()
 1304 ims = [(im.make_image(mag),0,0)
-> 1305 for im in self.images if im.get_visible()]
 1306
 1307
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/image.pyc
in make_image(self, magnification)
 129 im.is_grayscale = False
 130 else:
--> 131 x = self.to_rgba(self._A, self._alpha)
 132 im = _image.fromarray(x, 0)
 133 if len(self._A.shape) == 2:
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/cm.pyc in
to_rgba(self, x, alpha, bytes)
 74 x = ma.asarray(x)
 75 x = self.norm(x)
---> 76 x = self.cmap(x, alpha=alpha, bytes=bytes)
 77 return x
 78
/Users/cburns/local/lib/python2.5/site-packages/matplotlib/colors.pyc
in __call__(self, X, alpha, bytes)
 431 vtype = 'array'
 432 xma = ma.asarray(X)
--> 433 xa = xma.filled(0)
 434 mask_bad = ma.getmask(xma)
 435 if xa.dtype.char in npy.typecodes['Float']:
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
filled(self, fill_value)
 1542 m = self._mask
 1543 if m is nomask or not m.any():
-> 1544 return self._data
 1545 #
 1546 if fill_value is None:
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
_get_data(self)
 1472
 1473 """
-> 1474 return self.view(self._baseclass)
 1475 _data = property(fget=_get_data)
 1476 data = property(fget=_get_data)
/Users/cburns/local/lib/python2.5/site-packages/numpy/core/memmap.pyc
in __array_finalize__(self, obj)
 204 self._mmap = obj._mmap
 205 else:
--> 206 raise ValueError, 'Cannot create a memmap from
object %s'%obj
 207 else:
 208 self._mmap = None
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
__str__(self)
 1614 m = self._mask
 1615 if m is nomask:
-> 1616 res = self._data
 1617 else:
 1618 if m.shape == ():
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
_get_data(self)
 1472
 1473 """
-> 1474 return self.view(self._baseclass)
 1475 _data = property(fget=_get_data)
 1476 data = property(fget=_get_data)
/Users/cburns/local/lib/python2.5/site-packages/numpy/core/memmap.pyc
in __array_finalize__(self, obj)
 204 self._mmap = obj._mmap
 205 else:
--> 206 raise ValueError, 'Cannot create a memmap from
object %s'%obj
 207 else:
 208 self._mmap = None
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
__str__(self)
 1614 m = self._mask
 1615 if m is nomask:
-> 1616 res = self._data
 1617 else:
 1618 if m.shape == ():
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
_get_data(self)
 1472
 1473 """
-> 1474 return self.view(self._baseclass)
 1475 _data = property(fget=_get_data)
 1476 data = property(fget=_get_data)
/Users/cburns/local/lib/python2.5/site-packages/numpy/core/memmap.pyc
in __array_finalize__(self, obj)
 204 self._mmap = obj._mmap
 205 else:
--> 206 raise ValueError, 'Cannot create a memmap from
object %s'%obj
 207 else:
 208 self._mmap = None
.... [snip]
/Users/cburns/local/lib/python2.5/site-packages/numpy/ma/core.pyc in
_get_data(self)
 1472
 1473 """
-> 1474 return self.view(self._baseclass)
 1475 _data = property(fget=_get_data)
 1476 data = property(fget=_get_data)
RuntimeError: maximum recursion depth exceeded
Exception exceptions.AttributeError: "'memmap' object has no attribute
'_mmap'" in ignored
Exception exceptions.AttributeError: "'memmap' object has no attribute
'_mmap'" in ignored
[snip]
Exception exceptions.AttributeError: "'memmap' object has no attribute
'_mmap'" in <bound method memmap.__del__ of memmap([ 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.])> ignored
Exception exceptions.AttributeError: "'memmap' object has no attribute
'_mmap'" in <bound method memmap.__del__ of memmap([ 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.])> ignored
[snip]

View entire thread

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /