2016-12-16 121 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的可能实现(尽管它是完全通用的,但需要更多的工作)。