Julia 使用双索引的矩阵赋值

Julia 使用双索引的矩阵赋值,julia,Julia,我不知道如何获得这种行为: 根据该矩阵: julia>a=[11;11;12] 3×3数组{Int64,2}: 1 1 1 1 1 1 1 1 2 我想把所有的1改为5,但只在最后一行 我所做的是a[3,:][a[3,:].==1].=5但是a的值没有改变 我注意到: foo[foo .== 1] .= 5 a[3, :] = foo 这是可行的,但我正试图减少分配,这应该被删除 提前感谢您可以使用@view和替换: julia> a = [1 1 1

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

根据该矩阵:

julia>a=[11;11;12]
3×3数组{Int64,2}:
1  1  1
1  1  1
1  1  2
我想把所有的1改为5,但只在最后一行

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

我注意到:

foo[foo .== 1] .= 5
a[3,  :] = foo
这是可行的,但我正试图减少分配,这应该被删除


提前感谢

您可以使用
@view
替换

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
问题是
a[3,:][a[3,:].==1].=5
getindex(a,3,:)[a[3,:].==1].=5

getindex
返回
a
您正在修改副本,而不是原始的
a

您想使用
视图
视图(a,3,:)[a[3,:].==1].=5

也可以使用
@view
@views
宏执行此操作