2016-08-24 2 views
1

l로 변환합니다.이 행렬은 아래 삼각 행렬로 변환 된 n x 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 
관련 문제