1
1
""" `FillArrays` module to lazily represent matrices with a single value """
2
2
module FillArrays
3
3
4
- using LinearAlgebra, SparseArrays, Statistics
4
+ using LinearAlgebra
5
5
import Base: size, getindex, setindex!, IndexStyle, checkbounds, convert,
6
6
+ , - , * , / , \ , diff, sum, cumsum, maximum, minimum, sort, sort!,
7
7
any, all, axes, isone, iterate, unique, allunique, permutedims, inv,
@@ -16,9 +16,6 @@ import LinearAlgebra: rank, svdvals!, tril, triu, tril!, triu!, diag, transpose,
16
16
17
17
import Base. Broadcast: broadcasted, DefaultArrayStyle, broadcast_shape, BroadcastStyle, Broadcasted
18
18
19
- import Statistics: mean, std, var, cov, cor
20
-
21
-
22
19
export Zeros, Ones, Fill, Eye, Trues, Falses, OneElement
23
20
24
21
import Base: oneto
@@ -545,52 +542,6 @@ for SMT in (:Diagonal, :Bidiagonal, :Tridiagonal, :SymTridiagonal)
545
542
end
546
543
end
547
544
548
- # #################
549
- # # Sparse arrays
550
- # #################
551
- SparseVector {T} (Z:: ZerosVector ) where T = spzeros (T, length (Z))
552
- SparseVector {Tv,Ti} (Z:: ZerosVector ) where {Tv,Ti} = spzeros (Tv, Ti, length (Z))
553
-
554
- convert (:: Type{AbstractSparseVector} , Z:: ZerosVector{T} ) where T = spzeros (T, length (Z))
555
- convert (:: Type{AbstractSparseVector{T}} , Z:: ZerosVector ) where T= spzeros (T, length (Z))
556
-
557
- SparseMatrixCSC {T} (Z:: ZerosMatrix ) where T = spzeros (T, size (Z)... )
558
- SparseMatrixCSC {Tv,Ti} (Z:: Zeros{T,2,Axes} ) where {Tv,Ti<: Integer ,T,Axes} = spzeros (Tv, Ti, size (Z)... )
559
-
560
- convert (:: Type{AbstractSparseMatrix} , Z:: ZerosMatrix{T} ) where T = spzeros (T, size (Z)... )
561
- convert (:: Type{AbstractSparseMatrix{T}} , Z:: ZerosMatrix ) where T = spzeros (T, size (Z)... )
562
-
563
- convert (:: Type{AbstractSparseArray} , Z:: Zeros{T} ) where T = spzeros (T, size (Z)... )
564
- convert (:: Type{AbstractSparseArray{Tv}} , Z:: Zeros{T} ) where {T,Tv} = spzeros (Tv, size (Z)... )
565
- convert (:: Type{AbstractSparseArray{Tv,Ti}} , Z:: Zeros{T} ) where {T,Tv,Ti} = spzeros (Tv, Ti, size (Z)... )
566
- convert (:: Type{AbstractSparseArray{Tv,Ti,N}} , Z:: Zeros{T,N} ) where {T,Tv,Ti,N} = spzeros (Tv, Ti, size (Z)... )
567
-
568
- SparseMatrixCSC {Tv} (Z:: Eye{T} ) where {T,Tv} = SparseMatrixCSC {Tv} (I, size (Z)... )
569
- # works around missing `speye`:
570
- SparseMatrixCSC {Tv,Ti} (Z:: Eye{T} ) where {T,Tv,Ti<: Integer } =
571
- convert (SparseMatrixCSC{Tv,Ti}, SparseMatrixCSC {Tv} (I, size (Z)... ))
572
-
573
- convert (:: Type{AbstractSparseMatrix} , Z:: Eye{T} ) where {T} = SparseMatrixCSC {T} (I, size (Z)... )
574
- convert (:: Type{AbstractSparseMatrix{Tv}} , Z:: Eye{T} ) where {T,Tv} = SparseMatrixCSC {Tv} (I, size (Z)... )
575
-
576
- convert (:: Type{AbstractSparseArray} , Z:: Eye{T} ) where T = SparseMatrixCSC {T} (I, size (Z)... )
577
- convert (:: Type{AbstractSparseArray{Tv}} , Z:: Eye{T} ) where {T,Tv} = SparseMatrixCSC {Tv} (I, size (Z)... )
578
-
579
-
580
- convert (:: Type{AbstractSparseArray{Tv,Ti}} , Z:: Eye{T} ) where {T,Tv,Ti} =
581
- convert (SparseMatrixCSC{Tv,Ti}, Z)
582
- convert (:: Type{AbstractSparseArray{Tv,Ti,2}} , Z:: Eye{T} ) where {T,Tv,Ti} =
583
- convert (SparseMatrixCSC{Tv,Ti}, Z)
584
-
585
- function SparseMatrixCSC {Tv} (R:: RectOrDiagonalFill ) where {Tv}
586
- SparseMatrixCSC {Tv,eltype(axes(R,1))} (R)
587
- end
588
- function SparseMatrixCSC {Tv,Ti} (R:: RectOrDiagonalFill ) where {Tv,Ti}
589
- Base. require_one_based_indexing (R)
590
- v = parent (R)
591
- J = getindex_value (v)* I
592
- SparseMatrixCSC {Tv,Ti} (J, size (R))
593
- end
594
545
595
546
# ########
596
547
# maximum/minimum
@@ -701,35 +652,6 @@ function in(x, A::RectDiagonal{<:Number})
701
652
x == zero (eltype (A)) || x in A. diag
702
653
end
703
654
704
- # ########
705
- # mean, std
706
- # ########
707
-
708
- mean (A:: AbstractFill ; dims= (:)) = mean (identity, A; dims= dims)
709
- function mean (f:: Union{Function, Type} , A:: AbstractFill ; dims= (:))
710
- val = float (f (getindex_value (A)))
711
- dims isa Colon ? val :
712
- Fill (val, ntuple (d -> d in dims ? 1 : size (A,d), ndims (A))... )
713
- end
714
-
715
-
716
- function var (A:: AbstractFill{T} ; corrected:: Bool = true , mean= nothing , dims= (:)) where {T<: Number }
717
- dims isa Colon ? zero (float (T)) :
718
- Zeros {float(T)} (ntuple (d -> d in dims ? 1 : size (A,d), ndims (A))... )
719
- end
720
-
721
- cov (A:: AbstractFillVector{T} ; corrected:: Bool = true ) where {T<: Number } = zero (float (T))
722
- cov (A:: AbstractFillMatrix{T} ; corrected:: Bool = true , dims:: Integer = 1 ) where {T<: Number } =
723
- Zeros {float(T)} (size (A, 3 - dims), size (A, 3 - dims))
724
-
725
- cor (A:: AbstractFillVector{T} ) where {T<: Number } = one (float (T))
726
- function cor (A:: AbstractFillMatrix{T} ; dims:: Integer = 1 ) where {T<: Number }
727
- out = fill (float (T)(NaN ), size (A, 3 - dims), size (A, 3 - dims))
728
- out[LinearAlgebra. diagind (out)] .= 1
729
- out
730
- end
731
-
732
-
733
655
# ########
734
656
# include
735
657
# ########
@@ -738,6 +660,11 @@ include("fillalgebra.jl")
738
660
include (" fillbroadcast.jl" )
739
661
include (" trues.jl" )
740
662
663
+ @static if ! isdefined (Base, :get_extension )
664
+ include (" ../ext/FillArraysSparseArraysExt.jl" )
665
+ include (" ../ext/FillArraysStatisticsExt.jl" )
666
+ end
667
+
741
668
# #
742
669
# print
743
670
# #
0 commit comments