复制构造函数以创建一个单元素向量矩阵

Copy constructor to create a one element Matrix of Vectors

在 Julia 中,以下工作:

julia> A = Matrix{Vector{Float64}}([[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]] [[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]])
5×2 Array{Array{Float64,1},2}:
[-3.0, 4.0]  [-3.0, 4.0]
[8.0]        [8.0]
[7.0, 8.0]   [7.0, 8.0]
[0.0, 9.0]   [0.0, 9.0]
[-1.0]       [-1.0]

这将创建一个包含两个相同列的 Matrix{Vector{Float64}}

但是,使用相同的模式创建相同的对象但只有一列 returns 会出错:

julia> A = Matrix{Vector{Float64}}([[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]])

这怎么可能,我该如何解决?

从我的角度来看,我目前的解决方法并不令人满意,因为它使用了 hcat,是:

julia> A = hcat(Matrix{Vector{Float64}}(undef, 5, 0), [[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]])
5×1 Array{Array{Float64,1},2}:
[-3.0, 4.0]
[8.0]
[7.0, 8.0]
[0.0, 9.0]
[-1.0]

首先,没有必要将类型声明放在数组前面。随便写

A = [[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]] [[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]]

这是一个Array{Array{Float64,1},2}

如果你第二次尝试做同样的事情,你会得到非常不同的东西:

julia> [[[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]]]
1-element Array{Array{Array{Float64,1},1},1}

这是一个数组的数组。不是你想要的开始。

不幸的是,解决这个问题没有帮助。原因是你不能简单地将向量转换为矩阵,即使它们没有嵌套:

julia> Matrix{Float64}([1.0,2.0,3.0])
ERROR: MethodError: no method matching Array{Float64,2}(::Array{Float64,1})

错误信息很清楚。

创建 Nx1 矩阵实际上非常困难,但是您可以使用重塑:

julia> reshape([[-3.0,4.0],[8.0],[7.0, 8.0],[0.0,9.0],[-1.0]], :, 1)
5×1 Array{Array{Float64,1},2}:
 [-3.0, 4.0]
 [8.0]      
 [7.0, 8.0] 
 [0.0, 9.0] 
 [-1.0]

请记住,您通常不需要将数组文字传递给构造函数。 Julia 自己找出类型。