julia - 将向量分量分配给 Julia 中的不同变量

标签 julia

我想将运算结果分配给 Julia 中的变量串联。与此类似的东西(尽管这不起作用):

a = zeros(5)
b = zeros(5)
a, b .= rand(10)

这可能吗?谢谢。

最佳答案

您正在寻找“矢量 View 串联”。这里的想法是使用 SubArrays构建一个实际上是两个数组的 View 的数组。 Julia 不支持开箱即用。 Julia 包 ChainedVectors.jl是为此而构建的,但它已经严重过时了,并且仅适用于 Julia <= 0.4。

并非一切都会丢失。您有两种选择:

使用CatViews.jl

正如评论中指出的,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 允许您构建自己的 View 串联类型。构建它所需的工作量与您希望它的通用程度成正比。这是使用向量的第一次尝试:

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

关于julia - 将向量分量分配给 Julia 中的不同变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50864601/

相关文章:

R 和 Julia Kernels 在 Jupyter 笔记本中不可用

julia - 具有重复元素的数组的内存和计算高效创建

python - 非线性方程组 Julia

jupyter-notebook - 如果我关闭了标签页,如何重新打开 Jupyter 笔记本?

windows - 在 Julia 中更改包目录的路径(在 Windows 上)

Julia println() 不打印/不一致的行为

r - Julia 中的完美(或接近)多重共线性

dictionary - Julia,在遍历字典时更改键时的奇怪行为

Julia 内存

dataframe - Julia 中的矢量化 "in"函数?