将下三角矩阵变换为矢量[JULIA]

时间:2016-08-24 11:24:09

标签: matrix vector julia

具有n乘n的矩阵,其转换为下三角矩阵。然后我想使用vec()转换下部的traingular矩阵,但它不起作用。这是我的代码错误

x=rand(4,4)
4x4 Array{Float64,2}:
 0.453539  0.00897806  0.590051  0.401164
 0.219694  0.322613    0.826784  0.528058
 0.216173  0.752796    0.318784  0.721735
 0.648246  0.0184203   0.6562    0.69907 

c=LowerTriangular(x)

4x4 LowerTriangular{Float64,Array{Float64,2}}:
 0.453539  0.0        0.0       0.0    
 0.219694  0.322613   0.0       0.0    
 0.216173  0.752796   0.318784  0.0    
 0.648246  0.0184203  0.6562    0.69907

vec(c)
ERROR: ArgumentError: Triangular matrix must have two dimensions
 in similar at linalg/triangular.jl:27
 in reshape at abstractarray.jl:213
 in vec at abstractarraymath.jl:14

有没有将三角矩阵变换为矢量的函数?

谢谢

2 个答案:

答案 0 :(得分:5)

您可以使用collect

julia> x=rand(4,4)
4x4 Array{Float64,2}:
 0.98258   0.786791  0.776911  0.282855
 0.881244  0.270507  0.557487  0.376426
 0.915609  0.165074  0.388279  0.107354
 0.461926  0.210621  0.676718  0.161106

julia> y=LowerTriangular(x)
4x4 LowerTriangular{Float64,Array{Float64,2}}:
 0.98258   0.0       0.0       0.0     
 0.881244  0.270507  0.0       0.0     
 0.915609  0.165074  0.388279  0.0     
 0.461926  0.210621  0.676718  0.161106

julia> collect(y)
16-element Array{Float64,1}:
 0.98258 
 0.881244
 0.915609
 0.461926
 0.0     
 0.270507
 0.165074
 0.210621
 0.0     
 0.0     
 0.388279
 0.676718
 0.0     
 0.0     
 0.0     
 0.161106

答案 1 :(得分:3)

DO

x = rand(4,4)
c=LowerTriangular(x)
lower_triangular_matrix = convert(Array{Float64,2}, c)
l_t_vel = vec(lower_triangular_matrix)

似乎发生的事情是你有一个类型 LowerTriangular 而且vec()函数不会接受该类型作为参数,所以你只需将它转换回矩阵

修改/附录

您可以使用

methodswith(LowerTriangular)

LowerTriangular 类型的方法

你可以使用

methods(vec)
# 3 methods for generic function "vec":
vec{Tv,Ti}(S::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:243
vec(a::AbstractArray{T,1}) at abstractarraymath.jl:15
vec(a::AbstractArray{T,N}) at abstractarraymath.jl:14

看看"发送"存在(如果那是一个有意义的短语)存在于方法