Skip to content

Commit 18ff0bf

Browse files
committed
Using @views instead of selecdim
Using `@views` instead of `selecdim`
1 parent e3ed855 commit 18ff0bf

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/blockdiagonal.jl

+15-3
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ function LinearAlgebra.mul!(y::AbstractVecOrMat{T}, B::BlockDiagonal{T,V}, x::Ab
123123
@floop @inbounds for (block_id, block) in enumerate(blocks(B))
124124
block_start = B.cumulative_indices[block_id] + 1
125125
block_end = B.cumulative_indices[block_id + 1]
126-
mul!(selectdim(y,1,block_start:block_end), block, selectdim(x,1,block_start:block_end))
126+
@views mul!(y[block_start:block_end,:], block, x[block_start:block_end,:])
127127
end
128128
return y
129129
end
@@ -133,7 +133,9 @@ function LinearAlgebra.:\(B::BlockDiagonal, x::AbstractVecOrMat)
133133
@floop @inbounds for (block_id,block) in enumerate(blocks(B))
134134
block_start = B.cumulative_indices[block_id] + 1
135135
block_end = B.cumulative_indices[block_id + 1]
136-
y[block_start:block_end,:] = block\selectdim(x,1,block_start:block_end)
136+
# F = cholesky(block)
137+
F = factorize(block)
138+
@views ldiv!(y[block_start:block_end,:], F, x[block_start:block_end,:])
137139
end
138140
return y
139141
end
@@ -153,10 +155,20 @@ function LinearAlgebra.eigen(B::BlockDiagonal)
153155
@floop @inbounds for (block_id, block) in enumerate(blocks(B))
154156
E = eigen(block)
155157
vectors[block_id] .= E.vectors
156-
# push!(vectors,E.vectors)
157158
block_start = B.cumulative_indices[block_id] + 1
158159
block_end = B.cumulative_indices[block_id + 1]
159160
values[block_start:block_end] = E.values
160161
end
161162
return Eigen(values,BlockDiagonal(vectors))
162163
end
164+
165+
166+
## Functions
167+
# Idea to include matrix functions?
168+
for func in (:log, :sqrt, :sin, :tan, :cos, :sinh, :tanh)
169+
@eval begin
170+
function (Base.$func)(B::BlockDiagonal)
171+
return BlockDiagonal([($func)(block) for block in blocks(B)])
172+
end
173+
end
174+
end

src/rectangularblockdiagonal.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@ function SparseArrays.sparse(B::RectangularBlockDiagonal{T}) where {T}
101101
end
102102

103103
function LinearAlgebra.mul!(y::AbstractVecOrMat{T}, B::RectangularBlockDiagonal{T,V}, x::AbstractVecOrMat{T}) where {T,V}
104-
@floop @inbounds for (block_id, block) in enumerate(blocks(B))
104+
@floop @inbounds for (block_id, block) in enumerate(blocks(B))
105105
block_row_start = B.cumulative_row_indices[block_id] + 1
106106
block_row_end = B.cumulative_row_indices[block_id + 1]
107107
block_col_start = B.cumulative_col_indices[block_id] + 1
108108
block_col_end = B.cumulative_col_indices[block_id + 1]
109-
mul!(selectdim(y,1,block_row_start:block_row_end), block, selectdim(x,1,block_col_start:block_col_end))
109+
@views mul!(y[block_row_start:block_row_end,:], block, x[block_col_start:block_col_end,:])
110110
end
111111
return y
112112
end

0 commit comments

Comments
 (0)