<p dir="ltr">On 7 Sep 2012 14:38, "Benjamin Root" <<a href="mailto:ben.root@ou.edu">ben.root@ou.edu</a>> wrote:<br>
><br>
> An issue just reported on the matplotlib-users list involved a user who ran out of memory while attempting to do an imshow() on a large array.  While this wouldn't be totally unexpected, the user's traceback shows that they ran out of memory before any actual building of the image occurred.  Memory usage sky-rocketed when imshow() attempted to determine the min and max of the image.  The input data was a masked array, and it appears that the implementation of min() for masked arrays goes something like this (paraphrasing here):<br>

><br>
> obj.filled(inf).min()<br>
><br>
> The idea is that any masked element is set to the largest possible value for their dtype in a copied array of itself, and then a min() is performed on that copied array.  I am assuming that max() does the same thing.<br>

><br>
> Can this be done differently/more efficiently?  If the "filled" approach has to be done, maybe it would be a good idea to make the copy in chunks instead of all at once?  Ideally, it would be nice to avoid the copying altogether and utilize some of the special iterators that Mark Weibe created last year.</p>

<p dir="ltr">I think what you're looking for is where= support for ufunc.reduce. This isn't implemented yet but at least it's straightforward in principle... otherwise I don't know anything better than reimplementing .min() by hand.</p>

<p dir="ltr">-n</p>