Closed
Description
Sometimes one
or zero
returns a dense matrix, other times a special matrix type. one
and zero
are not defined for all major special matrix types in LinAlg
.
Ex.
julia> A = randn(5,5)
5x5 Array{Float64,2}:
-0.584781 -0.200855 0.622116 -0.217739 1.1236
0.134056 -0.136507 2.14805 -0.43222 -1.26277
0.459692 -0.665234 2.2665 -3.7361 -1.85841
0.561744 -1.54699 0.0842729 -0.00529171 -0.258032
-0.108674 -0.538445 -0.290112 -1.05528 0.496317
julia> SymA = A*A'/2
5x5 Array{Float64,2}:
1.03961 -0.0196852 0.000103685 -0.12706 0.389328
-0.0196852 3.21606 4.49128 0.397812 -0.367431
0.000103685 4.49128 11.6015 0.988823 1.33548
-0.12706 0.397812 0.988823 1.39123 0.312497
0.389328 -0.367431 1.33548 0.312497 0.872922
julia> BD = Bidiagonal(A, true)
5x5 Base.LinAlg.Bidiagonal{Float64}:
-0.584781 -0.200855 0.0 0.0 0.0
0.0 -0.136507 2.14805 0.0 0.0
0.0 0.0 2.2665 -3.7361 0.0
0.0 0.0 0.0 -0.00529171 -0.258032
0.0 0.0 0.0 0.0 0.496317
julia> one(BD)
5x5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
julia> zero(BD)
ERROR: MethodError: `similar` has no method matching similar(::Base.LinAlg.Bidiagonal{Float64}, ::Type{Float64}, ::(Int64,Int64))
Closest candidates are:
similar(::Range{T}, ::Type{T<:Top}, ::(Int64...,))
similar(::Range{T}, ::Type{T<:Top}, ::(Integer...,))
similar(::SubArray{T,N,P<:AbstractArray{T,N},I<:(Union(Array{Int64,1},Colon,Int64,Range{Int64})...,),LD}, ::Any, ::(Int64...,))
...
in zero at abstractarray.jl:298
julia> D = Diagonal(A)
5x5 Base.LinAlg.Diagonal{Float64}:
-0.584781 0.0 0.0 0.0 0.0
0.0 -0.136507 0.0 0.0 0.0
0.0 0.0 2.2665 0.0 0.0
0.0 0.0 0.0 -0.00529171 0.0
0.0 0.0 0.0 0.0 0.496317
julia> one(D)
5x5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
julia> zero(D)
5x5 Base.LinAlg.Diagonal{Float64}:
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
julia> S = Symmetric(SymA)
5x5 Base.LinAlg.Symmetric{Float64,Array{Float64,2}}:
1.03961 -0.0196852 0.000103685 -0.12706 0.389328
-0.0196852 3.21606 4.49128 0.397812 -0.367431
0.000103685 4.49128 11.6015 0.988823 1.33548
-0.12706 0.397812 0.988823 1.39123 0.312497
0.389328 -0.367431 1.33548 0.312497 0.872922
julia> one(S)
5x5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
julia> zero(S)
ERROR: MethodError: `similar` has no method matching similar(::Base.LinAlg.Symmetric{Float64,Array{Float64,2}}, ::Type{Float64}, ::(Int64,Int64))
Closest candidates are:
similar(::Range{T}, ::Type{T<:Top}, ::(Int64...,))
similar(::Range{T}, ::Type{T<:Top}, ::(Integer...,))
similar(::SubArray{T,N,P<:AbstractArray{T,N},I<:(Union(Array{Int64,1},Colon,Int64,Range{Int64})...,),LD}, ::Any, ::(Int64...,))
...
in zero at abstractarray.jl:298
julia> H = Hermitian(SymA)
5x5 Base.LinAlg.Hermitian{Float64,Array{Float64,2}}:
1.03961 -0.0196852 0.000103685 -0.12706 0.389328
-0.0196852 3.21606 4.49128 0.397812 -0.367431
0.000103685 4.49128 11.6015 0.988823 1.33548
-0.12706 0.397812 0.988823 1.39123 0.312497
0.389328 -0.367431 1.33548 0.312497 0.872922
julia> one(H)
5x5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
julia> zero(H)
ERROR: MethodError: `similar` has no method matching similar(::Base.LinAlg.Hermitian{Float64,Array{Float64,2}}, ::Type{Float64}, ::(Int64,Int64))
Closest candidates are:
similar(::Range{T}, ::Type{T<:Top}, ::(Int64...,))
similar(::Range{T}, ::Type{T<:Top}, ::(Integer...,))
similar(::SubArray{T,N,P<:AbstractArray{T,N},I<:(Union(Array{Int64,1},Colon,Int64,Range{Int64})...,),LD}, ::Any, ::(Int64...,))
...
in zero at abstractarray.jl:298
julia> UT = UpperTriangular(A)
5x5 Base.LinAlg.UpperTriangular{Float64,Array{Float64,2}}:
-0.584781 -0.200855 0.622116 -0.217739 1.1236
0.0 -0.136507 2.14805 -0.43222 -1.26277
0.0 0.0 2.2665 -3.7361 -1.85841
0.0 0.0 0.0 -0.00529171 -0.258032
0.0 0.0 0.0 0.0 0.496317
julia> one(UT)
5x5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
julia> zero(UT)
5x5 Base.LinAlg.UpperTriangular{Float64,Array{Float64,2}}:
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0
julia> ST = SymTridiagonal(SymA)
5x5 Base.LinAlg.SymTridiagonal{Float64}:
1.03961 -0.0196852 0.0 0.0 0.0
-0.0196852 3.21606 4.49128 0.0 0.0
0.0 4.49128 11.6015 0.988823 0.0
0.0 0.0 0.988823 1.39123 0.312497
0.0 0.0 0.0 0.312497 0.872922
julia> one(ST)
5x5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
julia> zero(ST)
ERROR: MethodError: `similar` has no method matching similar(::Base.LinAlg.SymTridiagonal{Float64}, ::Type{Float64}, ::(Int64,Int64))
Metadata
Metadata
Assignees
Labels
No labels