gpt4 book ai didi

multidimensional-array - Julia:数组中的赋值

转载 作者:行者123 更新时间:2023-12-04 15:10:22 24 4
gpt4 key购买 nike

当为数组索引多个级别时,它工作正常。但是当我用它来赋值时,它没有。有谁知道为什么A下面不改?

In  [4]: A = rand(6)

Out [4]: 6-element Array{Float64,1}:
0.111552
0.155126
0.78485
0.147477
0.362078
0.959022

In [5]: A[3:5][[true,false,true]]

Out [5]: 2-element Array{Float64,1}:
0.78485
0.362078

In [6]: A[3:5][[true,false,true]] = [99, 999]

Out [6]: 2-element Array{Int64,1}:
99
999

In [7]: A

Out [7]: 6-element Array{Float64,1}:
0.111552
0.155126
0.78485
0.147477
0.362078
0.959022

最佳答案

这是因为按范围和向量索引数组会返回一个带有输出的新数组(而不是原始数组的 View )。您的陈述等效于以下内容:

julia> A = rand(6)
6-element Array{Float64,1}:
0.806919
0.445286
0.882625
0.556251
0.719156
0.276755

julia> B = A[3:5]
3-element Array{Float64,1}:
0.882625
0.556251
0.719156

julia> B[[true,false,true]] = [99, 999]
2-element Array{Int64,1}:
99
999

julia> A'
1x6 Array{Float64,2}:
0.806919 0.445286 0.882625 0.556251 0.719156 0.276755

julia> B'
1x3 Array{Float64,2}:
99.0 0.556251 999.0

你实际上可以看到这就是 Julia 通过它的一些表达式实用程序所做的。注意显式括号——它正在调用 setindex!在索引的结果上,已经做了一个副本。 (GenSym() 是一种指定临时变量的内部方式):
julia> :(A[3:5][[true,false,true]] = [99, 999])
:((A[3:5])[[true,false,true]] = [99,999])

julia> expand(:(A[3:5][[true,false,true]] = [99, 999]))
:(begin
GenSym(0) = (top(vect))(99,999)
setindex!(getindex(A,colon(3,5)),GenSym(0),(top(vect))(true,false,true))
return GenSym(0)
end)

目标是最终让所有数组索引返回 View 而不是副本,但这仍在进行中。

关于multidimensional-array - Julia:数组中的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757047/

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