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

标签 multidimensional-array variable-assignment julia

当为数组索引多个级别时,它工作正常。但是当我用它来赋值时,它没有。有谁知道为什么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/

相关文章:

ruby - 哪个更地道 : positional arguments or option hashes?

julia - 在 julia 中创建用户类型的 View

python - Julia 将分区数据框存储到字典中

python - 获取 numpy ndarray 的一部分(对于任意维度)

c - 在 C 中,如何从多维数组中打印字符串?

c - 如何为二维数组分配和释放堆内存?

java - 在Java中,当我在线程扩展类的run()函数中时,我无法为变量赋值

vba - VBA 中关键字 Set 的实际作用是什么?

macros - 将表达式插入到引号内的表达式中

ruby - 要使用多个键散列的数组