[Numpy-discussion] lazy loading ndarrays

Joe Kington jkington at wisc.edu
Tue Jul 26 20:45:43 EDT 2011


Similar to what Matthew said, I often find that it's cleaner to make a
seperate class with a "data" (or somesuch) property that lazily loads the
numpy array.

For example, something like:

class DataFormat(object):
    def __init__(self, filename):
        self.filename = filename
        for key, value in self._read_header().iteritems():
            setattr(self, key, value)

    @property
    def data(self):
        try:
            return self._data
        except AttributeError:
            self._data = self._read_data()
            return self._data

Hope that helps,
-Joe

On Tue, Jul 26, 2011 at 4:15 PM, Matthew Brett <matthew.brett at gmail.com>wrote:

> Hi,
>
> On Tue, Jul 26, 2011 at 5:11 PM, Craig Yoshioka <craigyk at me.com> wrote:
> > I want to subclass ndarray to create a class for image and volume data,
> and when referencing a file I'd like to have it load the data only when
> accessed.  That way the class can be used to quickly set and manipulate
> header values, and won't load data unless necessary.  What is the best way
> to do this?  Are there any hooks I can use to load the data when an array's
> values are first accessed or manipulated?  I tried some trickery with
> __array_interface__ but couldn't get it to work very well.  Should I just
> use a memmapped array, and give up on a purely 'lazy' approach?
>
> What kind of images are you loading?   We do lazy loading in nibabel,
> for medical image type formats:
>
> http://nipy.sourceforge.net/nibabel/
>
> - but our images _have_ arrays and headers, rather than (appearing to
> be) arrays.  Thus something like:
>
> import nibabel as nib
>
> img = nib.load('my_image.img')
> # data not loaded at this point
> data = img.get_data()
> # data loaded now.  Maybe memmapped if the format allows
>
> If you think you might have similar needs, I'd be very happy to help
> you get going in nibabel...
>
> Best,
>
> Matthew
>  _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110726/4b2bf51b/attachment.html>


More information about the NumPy-Discussion mailing list