具有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
有没有将三角矩阵变换为矢量的函数?
谢谢
答案 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
看看"发送"存在(如果那是一个有意义的短语)存在于方法