嵌套数组切片

时间:2016-12-16 11:32:45

标签: arrays arraylist julia

假设我有一组向量:

    string commandString = @"
        UPDATE tblKlanten (Adres, Postcode, Gemeente, Email, Telefoonnummer)            
        SET(@Adres, @Postcode, @Gemeente, @Email, @Telefoonnummer) 
        WHERE id = @Id";   // <<--------------

    command.Parameters.Add("Id", OleDbType.Integer).Value = klan.Id;

此函数返回包含x-y位置的向量数组

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

现在我想分割这些矢量的所有x和y坐标,用plotyjs绘制它们。

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

1 个答案:

答案 0 :(得分: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点。 E.g:

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的可能实现(使其完全通用将需要更多的工作)。