如何在Julia中初始化一个空的二维数组?

29
m = []

初始化一个大小为1的空数组。我想要初始化一个大小为2的空数组(稍后会向其中添加值)。这可行吗?

3个回答

35

从Julia 1.0版本开始,您可以使用以下方法:

m = Array{Float64}(undef, 0, 0)

对于存储Float64值或其他更一般的内容的二维矩阵,其大小为(0,0):

m = Array{T}(undef, a, b, ...,z)

对于一个大小为 (a,b,...,z) 的多维张量(其内容为类型为 T 的垃圾数据)。


3
建议您在示例中将“T”替换为“Float64”。否则,人们可能会复制粘贴并出现错误。 - carstenbauer

15

尝试:

m = reshape([],0,2)
或者,
m = Array{Float64}(undef, 0, 2)

明确定义类型的第二个选项应该会生成更快的代码。

一个评论者短暂地建议使用Matrix()来表示0x0矩阵,而使用Matrix(0,2)来表示0x2矩阵。


我认为这种语法已经被弃用了,现在应该使用 m = Array{Float64, 2}() - amrods
所有变体在0.4和0.5中似乎都可以无警告地工作。但是,答案可能会改变以反映更好的实践。有任何参考资料吗? - Dan Getz
7
第二个方法在1.0上不再适用!你应该在回答中明确提到这一点。此外,你还漏掉了在1.0中建议的做法(请参见Antonello的回答)。 - carstenbauer

4

自Julia 1.8起

现在创建空数组变得更加简单了:

使用方括号内的多个分号,可以创建空的n维数组。

julia> m = [;;]
# 0×0 Matrix{Any}

julia> m = [;;;]
# 0×0×0 Array{Any, 3}

请注意,这只是用于构建未初始化的 Array 的语法糖:

julia/test/syntax.jl#L3143-L3146

@test []    == Array{Any}(undef, 0)
@test [;]   == Array{Any}(undef, 0)
@test [;;]  == Array{Any}(undef, 0, 0)
@test [;;;] == Array{Any}(undef, 0, 0, 0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接