嵌套数组切片

ara*_*van 2 arrays arraylist julia

假设我有一组向量:

""" 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
Run Code Online (Sandbox Code Playgroud)

此函数返回包含xy位置的向量数组

Vector[11]
 > Float64[2]
 > Float64[2]
 > Float64[2]
 > Float64[2]
  .
  .
  .
Run Code Online (Sandbox Code Playgroud)

现在我想分隔这些向量的所有x和y坐标,用plotyjs绘制它们.

我已经测试了一些没有成功的方法!在朱莉娅实现这一目标的正确方法是什么?

tim*_*tim 6

你可以播放getindex:

xs = getindex.(vv, 1)
ys = getindex.(vv, 2)
Run Code Online (Sandbox Code Playgroud)

编辑3:

或者,使用列表推导:

xs = [v[1] for v in vv]
ys = [v[2] for v in vv]
Run Code Online (Sandbox Code Playgroud)

编辑:

出于性能原因,您应该使用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)
Run Code Online (Sandbox Code Playgroud)

广播getindex和列表推导仍然有效,但您也可以reinterpret将向量作为2×11矩阵:

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

m = to_matrix(vv)
Run Code Online (Sandbox Code Playgroud)

请注意,这不会复制数据.您可以直接使用m或定义,例如,

xs = @view m[1,:]
ys = @view m[2,:]
Run Code Online (Sandbox Code Playgroud)

编辑2:

顺便说一下,不限制getline函数参数的类型具有许多优点,并且通常是优选的.上面的版本适用于任何使用标量和加法实现乘法的类型,例如,可能的实现immutable Point ... end(使其完全通用将需要更多的工作).