Its the `colon` function I was looking for, ty!

On Tuesday, July 1, 2014 6:27:55 PM UTC+2, Sam L wrote:
>
> Vector{Float64} is an just array of floats in memory, and there's no way 
> of knowing without checking that they're sorted in increasing or decreasing 
> order and equally spaced. In order to convert from Vector{Float64} to 
> FloatRange{Float64}, you'd have to assume that this is true or check.  If 
> you already know that should be true, you might as well use a range in the 
> first place.
>
> As Mauro said, they're both AbstractArrays and can be used interchangeably 
> in many cases, so there's not really any good reason to have such a 
> function. It's true that ranges use less memory, but if you already have a 
> vector sitting there you may as well use it, since the memory is already 
> allocated.
>
> If you wanted such a function something like this might* work:
> function vec2range(v::Vector{Float64}) 
>   issorted(v) || error("Not sorted")
>   a = (v[end] - v[1])/(length(v)-1)
>   for i in 2:length(v)
>     isapprox(a, v[i]-v[i-1]) || error("Differences are not constant")
>   end
>   colon(v[1], a, v[end])
> end
>
> *Might because floats are weird <http://floating-point-gui.de/>. See #2333 
> <https://github.com/JuliaLang/julia/issues/2333>, #5636 
> <https://github.com/JuliaLang/julia/pull/5636>, and probably others.  It 
> also does not work if length(v) < 2.
>
>
> On Tuesday, July 1, 2014 8:31:21 AM UTC-7, Andrei Berceanu wrote:
>>
>> And isn't there some inverse function to []?
>> I mean, if i have a Vector{Float64} [myrange] and want to convert it into 
>> a FloatRange{Float64} myrange.
>>
>>
>> On Tuesday, July 1, 2014 2:35:03 PM UTC+2, Mauro wrote:
>>>
>>> > Mauro, is that the only difference, the memory allocation? Can I use 
>>> ranges 
>>> > for plotting, for instance? 
>>>
>>> Ranges are basically just 3 numbers: start, step & stop.  Just have a 
>>> look at base/range.jl 
>>>
>>> On whether they can be used instead of arrays depends on the 
>>> implementation of the function in question.  However, generally 
>>> functions are implemented in terms of AbstractArray which Range (as well 
>>> as Array) is a subtype of.  Just try and if it doesn't work turn it into 
>>> an array with [myrange]. 
>>>
>>> > On Tuesday, July 1, 2014 1:33:34 PM UTC+2, Mauro wrote: 
>>> >> 
>>> >> > If I define an array using the syntax 
>>> >> > 
>>> >> >     a = [start:step:end] 
>>> >> > 
>>> >> > how can I later recover the step? I tried step(a), but that only 
>>> seems 
>>> >> to 
>>> >> > work for integer ranges. 
>>> >> 
>>> >> Why not keep the range?  It should work just like an array but use 
>>> less 
>>> >> memory: 
>>> >> 
>>> >> a = start:step:end 
>>> >> 
>>> >> and step works for float ranges: 
>>> >> 
>>> >> julia> step(0.5:6.1:40) 
>>> >> 6.1 
>>> >> 
>>>
>>>

Reply via email to