Keith Goodman wrote: > On Thu, Jul 22, 2010 at 7:48 AM, Warren Weckesser > <warren.weckes...@enthought.com> wrote: > > >> Actually, because of the use of reshape(3,3,4), your second >> example does make a copy. >> > > When does reshape return a view and when does it return a copy? > >
According to the numpy.reshape docstring, it returns a view when it can. In the previous example, it is not possible to configure the strides so that the four elements in each 2x2 block can be represented in a single axis using the original memory layout, so the data must be copied to achieve the shape (3,3,4). > Here's a simple example that returns a view: > > >>> x = np.array([1,2,3,4]) >>> y = x.reshape(2,2) >>> y[0,0] = 9 >>> x >>> > array([9, 2, 3, 4]) > > What's a simple example that returns a copy? > In [85]: x = np.array([[1,2],[3,4],[5,6]]).T # Note the transpose. In [86]: x Out[86]: array([[1, 3, 5], [2, 4, 6]]) In [87]: y = x.reshape(6) In [88]: x[0,1] = 99 In [89]: y Out[89]: array([1, 3, 5, 2, 4, 6]) Warren > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion