如何检查 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