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

时间:2019-06-19 16:03:10

标签: matrix julia copy-constructor

在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}}

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

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]

1 个答案:

答案 0 :(得分:2)

首先,不需要将类型声明放在数组前面。只是写

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矩阵实际上非常困难,但是您可以使用例如reshape:

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]

请记住,您通常不需要将数组文字传递给构造函数。朱莉娅会自己弄清楚类型。