On Nov 15, 2007 9:11 AM, Hans Meine <[EMAIL PROTECTED]> wrote: > Am Donnerstag, 15. November 2007 16:29:12 schrieb Warren Focke: > > On Thu, 15 Nov 2007, George Nurser wrote: > > > It looks to me like > > > a,b = (zeros((2,)),)*2 > > > is equivalent to > > > x= zeros((2,)) > > > a,b=(x,)*2 > > > > Correct. > > > > > If this is indeed a feature rather than a bug, is there an alternative > > > compact way to allocate many arrays? > > > > a, b = [zeros((2,)) for x in range(2)] > > Let me add that this is a standard Python caveat, which also happens with > lists -- many of us have once tried to initialize an array of empty lists > with ([], ) * N, which results in N references to the same empty list. > Warren pointed out the standard solution above.
And I'll just add that another option in this case is to avoid tuples and lists altogether and just unpack a larger array: a, b = zeros([2,2]) That's mostly inferior to the list comprehension solution in terms of clarity, but may appeal to the fans of the pithy. In some cases it also expresses intent better, but not often. <OFF TOPIC EDITORIAL> Using lists for shapes is clearer both typographically: compare zeros((2,)) and zeros([2]), and conceptually: shapes are closer to lists (variable length, homogeneous) than tuples (fixed length, inhomogeneous). Tuples are used for the shape attribute since they need to be immutable, but there's no reason to type them that way; it just makes things hard to read. <OFF TOPIC EDITORIAL> -- . __ . |-\ . . [EMAIL PROTECTED]
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion