Julia package to lazily representing matrices filled with a single entry,
as well as identity matrices. This package exports the following types: `Eye`

,
`Fill`

, `Ones`

, and `Zeros`

.

The primary purpose of this package is to present a unified way of constructing
matrices. For example, to construct a 5-by-5 `CLArray`

of all zeros, one would use

```
julia> CLArray(Zeros(5,5))
```

Because `Zeros`

is lazy, this can be accomplished on the GPU with no memory transfer.
Similarly, to construct a 5-by-5 `BandedMatrix`

of all zeros with bandwidths `(1,2)`

, one would use

```
julia> BandedMatrix(Zeros(5,5), (1, 2))
```

Here are the matrix type4s:

```
julia> Zeros(5, 6)
5×6 Zeros{Float64,2,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}}}:
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 0.0 0.0 0.0 0.0 0.0
julia> Zeros{Int}(5, 6)
5×6 Zeros{Int64,2,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}}}:
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> Ones{Int}(5)
5-element Ones{Int64,1,Tuple{Base.OneTo{Int64}}}:
1
1
1
1
1
julia> Eye{Int}(5)
5×5 Diagonal{Int64,Ones{Int64,1,Tuple{Base.OneTo{Int64}}}}:
1 ⋅ ⋅ ⋅ ⋅
⋅ 1 ⋅ ⋅ ⋅
⋅ ⋅ 1 ⋅ ⋅
⋅ ⋅ ⋅ 1 ⋅
⋅ ⋅ ⋅ ⋅ 1
julia> Fill(5.0f0, 3, 2)
3×2 Fill{Float32,2,Tuple{Base.OneTo{Int64},Base.OneTo{Int64}}}:
5.0 5.0
5.0 5.0
5.0 5.0
```

They support conversion to other matrix types like `Array`

, `SparseVector`

, `SparseMatrix`

, and `Diagonal`

:

```
julia> Matrix(Zeros(5, 5))
5×5 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> SparseMatrixCSC(Zeros(5, 5))
5×5 SparseMatrixCSC{Float64,Int64} with 0 stored entries
```

There is also support for offset index ranges:

```
julia> Ones((-3:2, 1:2))
Ones{Float64,2,Tuple{UnitRange{Int64},UnitRange{Int64}}} with indices -3:2×1:2:
1.0 1.0
1.0 1.0
1.0 1.0
1.0 1.0
1.0 1.0
1.0 1.0
```

11/20/2017

about 8 hours ago

102 commits