From c11854d891dafe5e765cbe47dc97296359779b60 Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Sat, 4 Jun 2016 16:10:27 -0400 Subject: [PATCH] Don't create temporaries in real eigfact. Fixes #16751 --- base/linalg/eigen.jl | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/base/linalg/eigen.jl b/base/linalg/eigen.jl index 3096d309d27df..13fdf3b0b6423 100644 --- a/base/linalg/eigen.jl +++ b/base/linalg/eigen.jl @@ -34,11 +34,13 @@ function eigfact!{T<:BlasReal}(A::StridedMatrix{T}; permute::Bool=true, scale::B evec = zeros(Complex{T}, n, n) j = 1 while j <= n - if WI[j] == 0.0 - evec[:,j] = VR[:,j] + if WI[j] == 0 + evec[:,j] = slice(VR, :, j) else - evec[:,j] = VR[:,j] + im*VR[:,j+1] - evec[:,j+1] = VR[:,j] - im*VR[:,j+1] + for i = 1:n + evec[i,j] = VR[i,j] + im*VR[i,j+1] + evec[i,j+1] = VR[i,j] - im*VR[i,j+1] + end j += 1 end j += 1 @@ -128,11 +130,13 @@ function eigfact!{T<:BlasReal}(A::StridedMatrix{T}, B::StridedMatrix{T}) vecs = zeros(Complex{T}, n, n) j = 1 while j <= n - if alphai[j] == 0.0 - vecs[:,j] = vr[:,j] + if alphai[j] == 0 + vecs[:,j] = slice(vr, :, j) else - vecs[:,j ] = vr[:,j] + im*vr[:,j+1] - vecs[:,j+1] = vr[:,j] - im*vr[:,j+1] + for i = 1:n + vecs[i,j ] = vr[i,j] + im*vr[i,j+1] + vecs[i,j+1] = vr[i,j] - im*vr[i,j+1] + end j += 1 end j += 1