[Numpy-discussion] is ndarray.base the closest base or the ultimate base?
Citi, Luca
lciti at essex.ac.uk
Mon Sep 21 04:35:47 EDT 2009
Hello,
I cannot quite understand whether ndarray.base is the closest base,
the one from which the view was made or the ultimate base, the one
actually containing the data.
I think the documentation and the actual behaviour mismatch.
In [1]: import numpy as np
In [2]: x = np.arange(12)
In [3]: y = x[::2]
In [4]: z = y[2:]
In [5]: x.flags
Out[5]:
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
In [6]: y.flags
Out[6]:
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
In [7]: z.flags
Out[7]:
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
In [8]: z.base
Out[8]: array([ 0, 2, 4, 6, 8, 10])
It looks like the "base" of "z" is "y", i.e. its closest base,
the array from which the view "z" was created.
But the documentation says:
base : ndarray
If the array is a view on another array, that array is
its `base` (unless that array is also a view). The `base` array
is where the array data is ultimately stored.
and it looks like the "base" should be "x", the array
where the data is ultimately stored.
I like the second one better. First, because this way I do not have
to travel all the bases until I find an array with OWNDATA set.
Second, because the current implementation keeps "y" alive
because of "z" while in the end "z" only needs "x".
In [11]: del y
In [12]: z.base
Out[12]: array([ 0, 2, 4, 6, 8, 10])
Comments?
Best,
Luca
More information about the NumPy-Discussion
mailing list