gpt4 book ai didi

arrays - 为什么点分配不更新多个数组?

转载 作者:行者123 更新时间:2023-12-01 01:48:50 25 4
gpt4 key购买 nike

我想将一些计算分配给一对数组,顶部部分进入数组 x,底部部分进入 y。我尝试了以下操作,但 xy 都没有更新:

x = zeros(2)
y = zeros(3)
[x;y] .= [1.2, 4.5, 2.3, 4.5, 5.6]

最佳答案

一般1.= 运算符只是将左侧的结果 赋值给任何值——在这种情况下结果是一个 全新的数组,其中 xy 的内容垂直连接。你可以看到 [x; y] 通过自己尝试创建一个与 xy 解耦的新数组:

x = zeros(2)
y = zeros(3)
r = [x;y]
r[1] = 1

julia> r
5-element Array{Float64,1}:
1.0
0.0
0.0
0.0
0.0

julia> x
2-element Array{Float64,1}:
0.0
0.0

julia> y
3-element Array{Float64,1}:
0.0
0.0
0.0

julia> r .= [1.2, 4.5, 2.3, 4.5, 5.6] # just changes `r`, not `x` or `y`
5-element Array{Float64,1}:
1.2
4.5
2.3
4.5
5.6

julia> all(iszero, x) && all(iszero, y)
true

现在,如果 xy 被放入来自 LazyArrays.jl 的特殊“惰性”容器中,您可以更新它们。模拟串联操作:

julia> using LazyArrays

julia> ApplyArray(vcat, x, y) .= [1.2, 4.5, 2.3, 4.5, 5.6]
5-element ApplyArray{Float64,1,typeof(vcat),Tuple{Array{Float64,1},Array{Float64,1}}}:
1.2
4.5
2.3
4.5
5.6

julia> x
2-element Array{Float64,1}:
1.2
4.5

julia> y
3-element Array{Float64,1}:
2.3
4.5
5.6

1 这一一般规则有一个重要的异常(exception):我们支持使用多个选定索引进行索引赋值,并结合 .= 来更新原始数组。换句话说,语法 y[1:2] .= [3.4, 5.6] 确实会更新 y 的前两个元素,即使 y[ 1:2] 其他地方将分配一个与 y 解耦的全新 2 元素数组。换句话说,当您在 .= 的左侧使用索引时,它会自动使用 view。必要时。

关于arrays - 为什么点分配不更新多个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com