diff --git a/src/composition.jl b/src/composition.jl index c8a9ed2e..de644ca1 100644 --- a/src/composition.jl +++ b/src/composition.jl @@ -126,19 +126,18 @@ function A_mul_B!(y::AbstractVector, A::CompositeMap, x::AbstractVector) if N==1 A_mul_B!(y, A.maps[1], x) else - T = eltype(y) - dest = Array{T}(undef, size(A.maps[1], 1)) + dest = similar(y, size(A.maps[1], 1)) A_mul_B!(dest, A.maps[1], x) source = dest if N>2 - dest = Array{T}(undef, size(A.maps[2], 1)) + dest = similar(y, size(A.maps[2], 1)) end for n in 2:N-1 try resize!(dest, size(A.maps[n], 1)) catch err if err == ErrorException("cannot resize array with shared data") - dest = Array{T}(undef, size(A.maps[n], 1)) + dest = similar(y, size(A.maps[n], 1)) else rethrow(err) end diff --git a/src/kronecker.jl b/src/kronecker.jl index 17f9511e..80fd502a 100644 --- a/src/kronecker.jl +++ b/src/kronecker.jl @@ -105,9 +105,8 @@ Base.:(==)(A::KroneckerMap, B::KroneckerMap) = (eltype(A) == eltype(B) && A.maps na, ma = size(At) mb, nb = size(B) v = zeros(T, ma) - Ty = eltype(y) - temp1 = Array{Ty}(undef, na) - temp2 = Array{Ty}(undef, nb) + temp1 = similar(y, na) + temp2 = similar(y, nb) @views @inbounds for i in 1:ma v[i] = one(T) A_mul_B!(temp1, At, v)