我想将操作的结果分配给Julia中的变量串联。与此类似的东西(虽然这不起作用):
a = zeros(5)
b = zeros(5)
a, b .= rand(10)
有可能吗?谢谢。
答案 0 :(得分:3)
您正在寻找“矢量视图连接”。这里的想法是使用SubArrays来构建一个实际上是两个数组视图的数组。 Julia不支持开箱即用。 Julia软件包ChainedVectors.jl是为此而构建的,但它已经过时且仅适用于Julia< = 0.4。
并非一切都丢失。您有两种选择:
正如评论中所指出的,CatViews.jl与ChainedVectors.jl类似,但与Julia 0.6和0.7一起使用:
Pkg.add("CatViews")
using CatViews
a = zeros(2)
b = zeros(2)
CatView(a, b) .= rand(4)
通过一点点工作,我们可以达到
a = zeros(2)
b = zeros(2)
MyView(a, b) .= rand(4)
Julia允许您构建自己的视图连接类型。构建它所需的工作量与你想要它的一般程度成正比。这是第一次使用向量的尝试:
julia> # Create a type for a view into two vectors.
julia> type MyView{T} <: AbstractVector{T}
a::Vector{T}
b:: Vector{T}
end
julia> import Base: size, getindex, setindex!
julia> # Define methods to make MyView behave properly.
julia> size(c::MyView) = size(c.a) .+ size(c.b)
julia> getindex(c::MyView, i::Int) = i <= length(c.a) ? getindex(a, i) : getindex(b, i-length(a))
julia> setindex!(c::MyView, val, i::CartesianIndex) = i[1] <= length(c.a) ? setindex!(c.a, val, i[1]) : setindex!(c.b, val, i[1]-length(a))
julia> setindex!(c::MyView, val, i::Int) = i <= length(c.a) ? setindex!(c.a, val, i) : setindex!(c.b, val, i-length(a))
julia> # Test MyView. Define two arrays and put them
julia> # into a single view.
julia> a = rand(2)
2-element Array{Float64,1}:
0.701867
0.543514
julia> b = rand(2)
2-element Array{Float64,1}:
0.00355893
0.405809
julia> MyView(a, b) .= rand(4)
4-element MyView{Float64}:
0.922896
0.969057
0.586866
0.457117
julia> # Hooray, it worked! As we see below,
julia> # the individual arrays were updated.
julia> a
2-element Array{Float64,1}:
0.922896
0.969057
julia> b
2-element Array{Float64,1}:
0.586866
0.457117
答案 1 :(得分:2)
此?
{{1}}
你必须告诉朱莉娅以某种方式拆分矢量。