I don't understand this obsession with wanting to store a bunch of numbers in memory which trivially compress. Even more so as most numerical computations are memory bound, so storing more stuff is bad. All the interface functions work with a range (or if not a bug report should be filed), apart from write. However, writing to a range-like-thing should be rare, most often probably a bug, and thus should be a conscious decision; so it is actually good to have to `collect` first.
I suspect the reason the logspace returns a vector is because no one had time to implement it yet. On Wed, 2015-09-30 at 20:17, Milan Bouchet-Valat <[email protected]> wrote: > Le mercredi 30 septembre 2015 à 10:31 -0700, Alex Ames a écrit : >> Another downvote on linspace returning a range object. It seems odd >> for linspace and logspace to return different types, and linrange >> provides the low-memory option where needed. Numpy's `linspace` also >> returns an array object. >> I ran into errors when trying to plot a function over a linspace of >> x values, since plotting libs currently expect vectors as arguments, >> not range objects. Easily fixed if you know Julia well, but >> Matlab/Python converts may be stymied. > This sounds more like an issue with the plotting libraries. In most > cases, you shouldn't care about the actual type of a read-only > AbstractArray. If they only support the Array type, people will run > into the same issue when using integer ranges à la 1:10 anyway. > > Do you have other examples in which returning a range object is an > issue? So far, that's the only one I've read (except for the confusion > about deprecation warnings). > > Regards > >> On Wednesday, September 30, 2015 at 12:19:22 PM UTC-5, J Luis wrote: >> > I want to add my voice to the dislikers. Those are the type of >> > surprises that are not welcome mainly for matlab users. >> > >> > quarta-feira, 30 de Setembro de 2015 às 16:53:57 UTC+1, Christoph >> > Ortner escreveu: >> > > I also strongly dislike the `linspace` change; I like the idea >> > > though of having `linspace` and `linrange`, where the former >> > > should give the array. >> > > Christoph >> > > >> > > >> > > On Wednesday, 30 September 2015 10:21:36 UTC+1, Michele Zaffalon >> > > wrote: >> > > > I just realize that the thread is about 0.3.11 and I am showing >> > > > output for 0.4.0-rc2. Sorry for the noise. >> > > > >> > > > On Wed, Sep 30, 2015 at 11:17 AM, Michele Zaffalon < >> > > > [email protected]> wrote: >> > > > > >> > > > > On Wed, Sep 30, 2015 at 9:50 AM, Milan Bouchet-Valat < >> > > > > [email protected]> wrote: >> > > > > > Le mercredi 30 septembre 2015 à 08:55 +0200, Michele >> > > > > > Zaffalon a écrit : >> > > > > > > Just curious: linspace returns a Range object, but >> > > > > > logspace returns a >> > > > > > > vector because there is no much use case for a LogRange >> > > > > > object? >> > > > > > > >> > > > > > > @feza: I have also seen the deprecation warning going >> > > > > > away after a >> > > > > > > couple of calls, but I am not sure why. If you restart >> > > > > > Julia, the >> > > > > > > deprecations reappear. >> > > > > > Deprecation warnings are only printed once for each call >> > > > > > place. The >> > > > > > idea is that once you're aware of it, there's no point in >> > > > > > nagging you. >> > > > > > >> > > > > > Anyway, that warning is most probably not related to >> > > > > > linspace at all, >> > > > > > but rather to the array concatenation syntax resulting in >> > > > > > an effect >> > > > > > equivalent to collect(). If you show us a piece of code >> > > > > > that prints the >> > > > > > warning, we can give you more details. >> > > > > > >> > > > > > >> > > > > > Regards >> > > > > Sorry, you are right, I was referring to the concatenation. >> > > > > It prints it exaclty twice if I type it in the REPL, it >> > > > > always prints it if I define it within a function e.g. a() = >> > > > > [1:3]. >> > > > > >> > > > > C:\Users\michele.zaffalon>julia >> > > > > _ >> > > > > _ _ _(_)_ | A fresh approach to technical >> > > > > computing >> > > > > (_) | (_) (_) | Documentation: >> > > > > http://docs.julialang.org >> > > > > _ _ _| |_ __ _ | Type "?help" for help. >> > > > > | | | | | | |/ _` | | >> > > > > | | |_| | | | (_| | | Version 0.4.0-rc2 (2015-09-18 17:51 >> > > > > UTC) >> > > > > _/ |\__'_|_|_|\__'_| | Official http://julialang.org/ rele >> > > > > ase >> > > > > |__/ | x86_64-w64-mingw32 >> > > > > >> > > > > julia> [1:3] >> > > > > WARNING: [a] concatenation is deprecated; use collect(a) >> > > > > instead >> > > > > in depwarn at deprecated.jl:73 >> > > > > in oldstyle_vcat_warning at abstractarray.jl:29 >> > > > > in vect at abstractarray.jl:32 >> > > > > while loading no file, in expression starting on line 0 >> > > > > 3-element Array{Int64,1}: >> > > > > 1 >> > > > > 2 >> > > > > 3 >> > > > > >> > > > > julia> [1:3] >> > > > > WARNING: [a] concatenation is deprecated; use collect(a) >> > > > > instead >> > > > > in depwarn at deprecated.jl:73 >> > > > > in oldstyle_vcat_warning at abstractarray.jl:29 >> > > > > in vect at abstractarray.jl:32 >> > > > > while loading no file, in expression starting on line 0 >> > > > > 3-element Array{Int64,1}: >> > > > > 1 >> > > > > 2 >> > > > > 3 >> > > > > >> > > > > julia> [1:3] >> > > > > 3-element Array{Int64,1}: >> > > > > 1 >> > > > > 2 >> > > > > 3 >> > > > > >> > > > > julia> a() = [1:3] >> > > > > a (generic function with 1 method) >> > > > > >> > > > > julia> a() >> > > > > WARNING: [a] concatenation is deprecated; use collect(a) >> > > > > instead >> > > > > in depwarn at deprecated.jl:73 >> > > > > in oldstyle_vcat_warning at abstractarray.jl:29 >> > > > > in a at none:1 >> > > > > while loading no file, in expression starting on line 0 >> > > > > 3-element Array{Int64,1}: >> > > > > 1 >> > > > > 2 >> > > > > 3 >> > > > > >> > > > > julia> a() >> > > > > WARNING: [a] concatenation is deprecated; use collect(a) >> > > > > instead >> > > > > in depwarn at deprecated.jl:73 >> > > > > in oldstyle_vcat_warning at abstractarray.jl:29 >> > > > > in a at none:1 >> > > > > while loading no file, in expression starting on line 0 >> > > > > 3-element Array{Int64,1}: >> > > > > 1 >> > > > > 2 >> > > > > 3 >> > > > > >> > > > > julia> a() >> > > > > WARNING: [a] concatenation is deprecated; use collect(a) >> > > > > instead >> > > > > in depwarn at deprecated.jl:73 >> > > > > in oldstyle_vcat_warning at abstractarray.jl:29 >> > > > > in a at none:1 >> > > > > while loading no file, in expression starting on line 0 >> > > > > 3-element Array{Int64,1}: >> > > > > 1 >> > > > > 2 >> > > > > 3 >> > > > > >> > > > > > >> > > > > > > On Wed, Sep 30, 2015 at 5:40 AM, feza <[email protected] >> > > > > > > wrote: >> > > > > > > > Strange it *was* giving me an error saying deprecated >> > > > > > and that I >> > > > > > > > should use collect, but now it's fine. >> > > > > > > > >> > > > > > > > >> > > > > > > > On Tuesday, September 29, 2015 at 10:28:12 PM UTC-4, >> > > > > > Sheehan Olver >> > > > > > > > wrote: >> > > > > > > > > fez, I'm pretty sure the code works fine without the >> > > > > > collect: >> > > > > > > > > when exp is called on linspace it converts it to a >> > > > > > vector. >> > > > > > > > > Though the returned t will be linspace object. >> > > > > > > > > >> > > > > > > > > On Wednesday, September 30, 2015 at 12:10:55 PM >> > > > > > UTC+10, feza >> > > > > > > > > wrote: >> > > > > > > > > > Here's the code I was using where I needed to use >> > > > > > collect (I've >> > > > > > > > > > been playing around with Julia, so any suggestions >> > > > > > on this code >> > > > > > > > > > for perf is welcome ;) ) . In general linspace (or >> > > > > > the : >> > > > > > > > > > notation) is also used commonly to lay a grid in >> > > > > > space for >> > > > > > > > > > solving a PDE for some other use cases. >> > > > > > > > > > >> > > > > > > > > > function gp(n) >> > > > > > > > > > n = convert(Int,n) >> > > > > > > > > > t0 = 0 >> > > > > > > > > > tf = 5 >> > > > > > > > > > t = collect( linspace(t0, tf, n+1) ) >> > > > > > > > > > sigma = exp( -(t - t[1]) ) >> > > > > > > > > > >> > > > > > > > > > c = [sigma; sigma[(end-1):-1:2]] >> > > > > > > > > > lambda = fft(c) >> > > > > > > > > > eta = sqrt(lambda./(2*n)) >> > > > > > > > > > >> > > > > > > > > > Z = randn(2*n) + im*randn(2*n) >> > > > > > > > > > x = real( fft( Z.*eta ) ) >> > > > > > > > > > return (x, t) >> > > > > > > > > > end >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > On Tuesday, September 29, 2015 at 8:59:52 PM UTC-4, >> > > > > > Stefan >> > > > > > > > > > Karpinski wrote: >> > > > > > > > > > > I'm curious why you need a vector rather than an >> > > > > > object. Do >> > > > > > > > > > > you mutate it after creating it? Having linspace >> > > > > > return an >> > > > > > > > > > > object instead of a vector was a bit of a unclear >> > > > > > judgement >> > > > > > > > > > > call so getting feedback would be good. >> > > > > > > > > > > >> > > > > > > > > > > On Tuesday, September 29, 2015, Patrick Kofod >> > > > > > Mogensen < >> > > > > > > > > > > [email protected]> wrote: >> > > > > > > > > > > > No: >> > > > > > > > > > > > >> > > > > > > > > > > > julia> logspace(0,3,5) >> > > > > > > > > > > > 5-element Array{Float64,1}: >> > > > > > > > > > > > 1.0 >> > > > > > > > > > > > 5.62341 >> > > > > > > > > > > > 31.6228 >> > > > > > > > > > > > 177.828 >> > > > > > > > > > > > 1000.0 >> > > > > > > > > > > > >> > > > > > > > > > > > On Tuesday, September 29, 2015 at 8:50:47 PM >> > > > > > UTC-4, Luke >> > > > > > > > > > > > Stagner wrote: >> > > > > > > > > > > > > Thats interesting. Does logspace also return >> > > > > > a range? >> > > > > > > > > > > > > >> > > > > > > > > > > > > On Tuesday, September 29, 2015 at 5:43:28 PM >> > > > > > UTC-7, Chris >> > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > In 0.4 the linspace function returns a >> > > > > > range object, >> > > > > > > > > > > > > > and you need to use collect() to expand it. >> > > > > > I'm also >> > > > > > > > > > > > > > interested in nicer syntax. >> > > > > > >> > > > > >> > > >
