2016-12-16 110 views
2

比方說,我有載體的數組:嵌套陣列切片

""" simple line equation """ 
function getline(a::Array{Float64,1},b::Array{Float64,1}) 
    line = Vector[] 
    for i=0:0.1:1 
     vector = (1-i)a+(i*b) 
     push!(line, vector) 
    end 
    return line 
end 

該函數返回一個包含XY位置

Vector[11] 
> Float64[2] 
> Float64[2] 
> Float64[2] 
> Float64[2] 
    . 
    . 
    . 

現在我想seprate所有的x和y座標向量數組這些載體用plotyjs來繪製它們。

我已經測試了一些沒有成功的方法! 朱莉婭實現此目標的正確方法是什麼?

回答

6

可以播放getindex

xs = getindex.(vv, 1) 
ys = getindex.(vv, 2) 

編輯3:

另外,使用列表理解:

xs = [v[1] for v in vv] 
ys = [v[2] for v in vv] 

編輯:

出於性能考慮,你應該使用StaticArrays代表2D點。例如: -

getline(a,b) = [(1-i)a+(i*b) for i=0:0.1:1] 

p1 = SVector(1.,2.) 
p2 = SVector(3.,4.) 

vv = getline(p1,p2) 

廣播getindex和列表內涵仍然可以工作,但你也可以reinterpret向量作爲2×11矩陣:

to_matrix{T<:SVector}(a::Vector{T}) = reinterpret(eltype(T), a, (size(T,1), length(a))) 

m = to_matrix(vv) 

注意,這不會複製數據。可以簡單地直接使用m或限定,例如,

xs = @view m[1,:] 
ys = @view m[2,:] 

編輯2:

順便說一句,不限制的getline函數的參數的類型有很多優點,並是優選的總稱。上面的版本適用於實現乘以標量和加法的任何類型,例如immutable Point ... end的可能實現(儘管它是完全通用的,但需要更多的工作)。