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
>> >>
>>
>>