On Di, 2014-10-28 at 20:37 -0400, Alexander Belopolsky wrote: > > On Tue, Oct 28, 2014 at 1:42 PM, Stephan Hoyer <sho...@gmail.com> > wrote: > .flat lets you iterate over all elements of a N-dimensional > array as if it was 1D, without ever needing to make a copy of > the array. In contrast, ravel() and reshape(-1) cannot always > avoid a copy, because they need to return another ndarray. > > > In some cases ravel() returns a copy where a view can be easily > constructed. For example, >
Yeah, but we just changed that for 1.10, not ravel can even get further if you use order='K'. - Sebastian > > >>> x = np.arange(10) > >>> y = x[::2] > >>> y.ravel().flags['OWNDATA'] > True > > > Interestingly, in the same case reshape(-1) returns a view: > > > >>> y.reshape(-1).flags['OWNDATA'] > False > > > (This suggests at least a documentation bug - numpy.ravel > documentation says that it is equivalent to reshape(-1).) > > > It is only in situations like this > > > >>> a = np.arange(16).reshape((4,4)) > >>> a[1::2,1::2].ravel() > array([ 5, 7, 13, 15]) > > > where flat view cannot be an ndarray, but .flat can still return > something that is at least duck-typing compatible with ndarray (if not > an ndarray subclass) and behaves as a view into original data. > > > My preferred design would be for x.flat to return a flat view into x. > This would be consistent with the way .T and .real attributes are > defined and close enough to .imag. An obvious way to obtain a flat > copy would be x.flat.copy(). Once we have this, ravel() and flatten() > can be deprecated and reshape(-1) discouraged. > > > I think this would be backward compatible except for rather > questionable situations like this: > > > >>> i = x.flat > >>> list(i) > [0, 1, 2, 3, 4, 0, 6, 7, 8, 9] > >>> list(i) > [] > >>> np.array(i) > array([0, 1, 2, 3, 4, 0, 6, 7, 8, 9]) > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion
signature.asc
Description: This is a digitally signed message part
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion