2016-08-24 2 views
1

Ich habe eine Matrix von n nach n, die in eine untere Dreiecksmatrix umgewandelt wurde. Dann möchte ich die untere trainguale Matrix mit vec() transformieren, aber es funktioniert nicht. hier ist mein CodefehlerEine untere dreieckige Matrix in einen Vektor transformieren [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 

Gibt es irgendeine Funktion, dreieckige Matrix in einen Vektor zu verwandeln?

Danke

+1

können Sie auch '[c ...]' – Gnimuc

Antwort

3

tun

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

Was zu geschehen scheint, ist, dass Sie eine Art LowerTriangular und die VEC haben() Funktion wird nicht diese Art als Argument akzeptieren, so dass Sie es einfach konvertieren nach rechts zurück zu einer Matrix

Bearbeiten/Anhang

können Sie verwenden

methodswith(LowerTriangular) 

, welche Methoden die Art in LowerTriangular erscheint

zu sehen und Sie können verwenden

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 

zu sehen, was "Versendungen" existieren (wenn das eine Phrase ist, dass Sinn macht) existieren für eine Methode

+0

danke für den Trick verwenden – vincet

4

Sie können collect

verwenden
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 
Verwandte Themen