On Thu, Apr 2, 2009 at 19:18, Charles R Harris <[email protected]> wrote: > > > On Thu, Apr 2, 2009 at 5:50 PM, <[email protected]> wrote: >> >> On Thu, Apr 2, 2009 at 6:46 PM, Charles R Harris >> <[email protected]> wrote: >> > Note: >> > >> > In [133]: l = [[1,0,0],[1,1,0],[1,1,1]] >> > >> > In [134]: dstack(l) >> > Out[134]: >> > array([[[1, 1, 1], >> > [0, 1, 1], >> > [0, 0, 1]]]) >> > >> > In [135]: dstack(l).shape >> > Out[135]: (1, 3, 3) >> > >> > >> > Shouldn't the shape be (3,3)? Also, for generalized ufuncs and >> > broadcasting >> > I think a function that stacked along the first axis instead of the last >> > would be useful. Maybe gstack or astack? >> > >> > Chuck >> > >> >> I think dstack, vstack and hstack work exactly as advertised in the >> docs, at least that's how I interpret and use them >> >> Josef >> >> >>> l = [[1,0,0],[1,1,0],[1,1,1]] >> >>> np.dstack(l).shape >> (1, 3, 3) >> >>> np.vstack(l).shape >> (3, 3) >> >>> np.hstack(l).shape >> (9,) >> >>> np.vstack(l) >> array([[1, 0, 0], >> [1, 1, 0], >> [1, 1, 1]]) >> >>> np.dstack(l)[:,:,0] >> array([[1, 0, 0]]) >> >>> np.dstack(l)[:,:,1] >> array([[1, 1, 0]]) >> >>> np.dstack(l)[:,:,2] >> array([[1, 1, 1]]) >> ________ > > But stacking 2D arrays gives the same number of dimensions as stack 1D > vectors: > > In [1]: dstack([eye(3)]*3) > Out[1]: > array([[[ 1., 1., 1.], > [ 0., 0., 0.], > [ 0., 0., 0.]], > > [[ 0., 0., 0.], > [ 1., 1., 1.], > [ 0., 0., 0.]], > > [[ 0., 0., 0.], > [ 0., 0., 0.], > [ 1., 1., 1.]]]) > > In [2]: dstack([eye(3)]*3).shape > Out[2]: (3, 3, 3) > > So dstack is turning 1D vectors iinto 1xn arrays so that > > In [8]: dstack([[1,0]]*3).shape > Out[8]: (1, 2, 3) > > In [9]: dstack([[[1,0]]]*3).shape > Out[9]: (1, 2, 3) > > Note the different bracket counts. This messes up general applications so > that dstacking 1D vectors has to be treated differently than dstacking > arrays. You can't sum along the last axis of the stack and get a 1D vector > back, whereas for dstacked 2D arrays summing along the last axis gives back > a 2D array.
Depth stack presumes at-least-3D arrays (hence "along the third axis" rather than "along the last axis") and "upcasts" input arrays with atleast_3d(). That's just what it does and has always done. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco _______________________________________________ Numpy-discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
