使用双索引在矩阵中赋值

gin*_*bab 4 julia

我不知道如何获得这种行为:

从这个矩阵:

julia> a = [1 1 1; 1 1 1; 1 1 2]
3×3 Array{Int64,2}:
 1  1  1
 1  1  1
 1  1  2
Run Code Online (Sandbox Code Playgroud)

我想把所有的 1s 改为 5s,但只在最后一行。

我所做的是a[3, :][a[3, :] .== 1] .= 5但 a 的值没有改变。

我注意到:

foo[foo .== 1] .= 5
a[3,  :] = foo
Run Code Online (Sandbox Code Playgroud)

它有效,但我正在尝试减少分配,应该删除它。

提前致谢

Bog*_*ski 6

您可以使用@viewreplace!

julia> a = [1 1 1
            1 1 1
            1 1 2]
3×3 Array{Int64,2}:
 1  1  1
 1  1  1
 1  1  2

julia> replace!(@view(a[end, :]), 1 => 5)
3-element view(::Array{Int64,2}, 3, :) with eltype Int64:
 5
 5
 2

julia> a
3×3 Array{Int64,2}:
 1  1  1
 1  1  1
 5  5  2
Run Code Online (Sandbox Code Playgroud)