My apologies. I got confused by the comment "The right-hand side is returned, which might cause some confusion here.", and mistakenly thought the slice assignment was changing the size of x (an array of size 9 is output, not of size 10, but x still has size 10). Sorry.
On Friday, May 9, 2014 9:52:52 AM UTC-7, Jameson wrote: > > I believe this is a side-effect of array views in numpy, and not some > mysterious repeated evaluation > > On Friday, May 9, 2014, Jeff Bezanson <[email protected] <javascript:>> > wrote: > >> I would argue that the python behavior of evaluating x[1:10] twice, >> both before and after the first assignment operation, is very >> non-sensible and non-intuitive. Every `=` in julia evaluates its >> right-hand side once, and ultimately returns that value. That way when >> you chain assignments you know the exact same value gets assigned >> everywhere. I don't see how you can argue that this is not sensible. >> >> On Fri, May 9, 2014 at 3:07 AM, Keno Fischer >> <[email protected]> wrote: >> > The python example doesn't show anything different. The matlab example >> does >> > in that it returns x (though not the slice assigned to). The real >> difference >> > to python is this: >> > >> >>>> x = numpy.arange(1,11) >> >>>> y = x[0:9] = x[1:10] >> >>>> y >> > array([ 3, 4, 5, 6, 7, 8, 9, 10, 10]) >> > >> > so in python that means >> > x[0:9] = x[1:10] >> > y = x[1:10] >> > >> > whereas in Julia it means >> > >> > temp = x[1:10] >> > x = temp >> > y = temp >> > >> > >> > >> > >> > On Fri, May 9, 2014 at 2:59 AM, Dominique Orban < >> [email protected]> >> > wrote: >> >> >> >> Is that really the intended effect??? Python and Matlab seem much more >> >> intuitive and return something sensible: >> >> >> >> >> x = [1:10]; >> >> >> x(1:9) = x(2:10) >> >> >> >> x = >> >> 2 3 4 5 6 7 8 9 10 10 >> >> >> >> >> >> >>> import numpy >> >> >>> x = numpy.arange(1,11) >> >> >>> x[0:9] = x[1:10] >> >> >>> x >> >> array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10]) >> >> >> >> >> >> On Thursday, May 8, 2014 8:59:58 PM UTC-7, Jeff Bezanson wrote: >> >>> >> >>> Yes, it is well-defined. The right-hand side is returned, which might >> >>> cause some confusion here. >> >>> >> >>> On Thu, May 8, 2014 at 10:10 AM, Neal Becker <[email protected]> >> wrote: >> >>> > Is the following well-defined in julia? >> >>> > >> >>> > julia> x = [1:10] >> >>> > 10-element Array{Int64,1}: >> >>> > 1 >> >>> > 2 >> >>> > 3 >> >>> > 4 >> >>> > 5 >> >>> > 6 >> >>> > 7 >> >>> > 8 >> >>> > 9 >> >>> > 10 >> >>> > >> >>> > julia> x[1:9] = x[2:10] >> >>> > 9-element Array{Int64,1}: >> >>> > 2 >> >>> > 3 >> >>> > 4 >> >>> > 5 >> >>> > 6 >> >>> > 7 >> >>> > 8 >> >>> > 9 >> >>> > 10 >> >>> > >> >>> > In general, are all such aliased assignments well-defined (all, as >> in >> >>> > for >> >>> > arbitrary ranges)? >> >>> > >> > >> > >> >
