假设我有一组向量:
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绘制它们。
我已经测试了一些没有成功的方法! 朱莉娅有什么正确的方法来实现这个目标?
答案 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
的可能实现(使其完全通用将需要更多的工作)。