2016-08-24 85 views
1

l具有n乘n的矩陣,其被變換爲下三角矩陣。然後,我想使用vec()來轉換較低的traingular矩陣,但它不起作用。這裏是我的代碼錯誤將下三角矩陣變換爲矢量[JULIA]

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 

是否有任何函數將三角矩陣轉換爲向量?

謝謝

+1

你也可以用'[c ...]' – Gnimuc

回答

3

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 

看什麼「急件」的存在(如果這是一個短語,有意義)存在的方法

+0

謝謝你的訣竅 – vincet

4

您可以使用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