如何检查 Matrix 中的 undef 值(在 Julia 中)并分配一个新值?
How to check for an undef value in a Matrix (in Julia) and assign a new value?
我想创建一个未定义值的矩阵 A,并使用以下代码运行良好。
A = Matrix{Tuple{Float64, Array{Int64, 1}}}(undef, 100, 100)
稍后,我想检查一个特定的单元格是否未定义,如果是,计算后赋值。我试过 isdefined(A, i, j)
但是因为参数太多而出错。如何检查 #undef
并仅在它未定义时分配?
isdefined
上的文档只提供了一种方法用于一维数组,我如何在矩阵上实现相同的方法?
您可以使用 isassigned
函数(在 isdefined
的帮助字符串中提到,顺便说一下)。像 isdefined
它似乎只接受线性索引,但你可以从 LinearIndices
.
获得它们
julia> A = Matrix{Tuple{Float64, Array{Int64, 1}}}(undef, 100, 100);
julia> A[5, 4] = (2.1, [5])
(2.1, [5])
julia> isassigned(A, LinearIndices(A)[1, 1])
false
julia> isassigned(A, LinearIndices(A)[5, 4])
true
编辑:如@PrzemyslawSzufel 的回答所示,您不需要线性索引。不过,似乎没有记录,直到并包括 v1.5.1
使用isassigned
:
julia> A[2,3]=(3.0, [])
(3.0, Any[])
julia> isassigned(A,2,3)
true
julia> isassigned(A,3,3)
false
我想创建一个未定义值的矩阵 A,并使用以下代码运行良好。
A = Matrix{Tuple{Float64, Array{Int64, 1}}}(undef, 100, 100)
稍后,我想检查一个特定的单元格是否未定义,如果是,计算后赋值。我试过 isdefined(A, i, j)
但是因为参数太多而出错。如何检查 #undef
并仅在它未定义时分配?
isdefined
上的文档只提供了一种方法用于一维数组,我如何在矩阵上实现相同的方法?
您可以使用 isassigned
函数(在 isdefined
的帮助字符串中提到,顺便说一下)。像 isdefined
它似乎只接受线性索引,但你可以从 LinearIndices
.
julia> A = Matrix{Tuple{Float64, Array{Int64, 1}}}(undef, 100, 100);
julia> A[5, 4] = (2.1, [5])
(2.1, [5])
julia> isassigned(A, LinearIndices(A)[1, 1])
false
julia> isassigned(A, LinearIndices(A)[5, 4])
true
编辑:如@PrzemyslawSzufel 的回答所示,您不需要线性索引。不过,似乎没有记录,直到并包括 v1.5.1
使用isassigned
:
julia> A[2,3]=(3.0, [])
(3.0, Any[])
julia> isassigned(A,2,3)
true
julia> isassigned(A,3,3)
false