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绘制它们.
我已经测试了一些没有成功的方法!在朱莉娅实现这一目标的正确方法是什么?
你可以播放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
(使其完全通用将需要更多的工作).