如何解决使用双索引在矩阵中分配
我不知道如何获得这种行为:
从此矩阵:
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
我想将所有的1改为5,但只能在最后一行。
我所做的是a[3,:][a[3,:] .== 1] .= 5
,但是a的值没有改变。
我注意到了:
foo[foo .== 1] .= 5
a[3,:] = foo
它可以工作,但是我正在尝试减少分配,应该将其删除。
预先感谢
解决方法
您可以使用@view
和replace!
:
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,:)[a[3,:] .== 1] .=5
getindex
返回a
那部分的副本
您要更改副本,而不是原始的a
您要使用view
view(a,:] .== 1] .=5
您也可以使用@view
或@views
宏来完成此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。