|
15 | 15 |
|
16 | 16 | A lightweight box for an `AbstractMatrix` to make it behave like a vector of vectors.
|
17 | 17 | """
|
18 |
| -struct ColVecs{T, TX<:AbstractMatrix{T}} <: AbstractVector{Vector{T}} |
| 18 | +struct ColVecs{T, TX<:AbstractMatrix{T}} <: AbstractVector{SubArray} |
19 | 19 | X::TX
|
20 | 20 | ColVecs(X::TX) where {T, TX<:AbstractMatrix{T}} = new{T, TX}(X)
|
21 | 21 | end
|
22 | 22 |
|
23 |
| -Base.:(==)(D1::ColVecs, D2::ColVecs) = D1.X == D2.X |
24 | 23 | Base.size(D::ColVecs) = (size(D.X, 2),)
|
25 |
| -Base.length(D::ColVecs) = size(D.X, 2) |
26 |
| -Base.getindex(D::ColVecs, n::Int) = D.X[:, n] |
27 |
| -Base.getindex(D::ColVecs, n::CartesianIndex{1}) = getindex(D, n[1]) |
28 |
| -Base.getindex(D::ColVecs, n) = ColVecs(D.X[:, n]) |
29 |
| -Base.view(D::ColVecs, n::Int) = view(D.X, :, n) |
30 |
| -Base.view(D::ColVecs, n) = ColVecs(view(D.X, :, n)) |
31 |
| -Base.eltype(::Type{<:ColVecs{T}}) where T = Vector{T} |
32 |
| -Base.zero(D::ColVecs) = ColVecs(zero(D.X)) |
33 |
| -Base.iterate(D::ColVecs) = (view(D.X, :, 1), 2) |
34 |
| -Base.iterate(D::ColVecs, state) = state > length(D) ? nothing : (view(D.X, :, state), state + 1) |
35 |
| - |
| 24 | +Base.getindex(D::ColVecs, i::Int) = view(D.X, :, i) |
| 25 | +Base.getindex(D::ColVecs, i::AbstractVector{Int}) = ColVecs(view(D.X, :, i)) |
36 | 26 |
|
37 | 27 | # Take highest Float among possibilities
|
38 | 28 | # function promote_float(Tₖ::DataType...)
|
|
0 commit comments