Skip to content

Commit c11854d

Browse files
committed
Don't create temporaries in real eigfact. Fixes #16751
1 parent 967ef80 commit c11854d

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

base/linalg/eigen.jl

+12-8
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ function eigfact!{T<:BlasReal}(A::StridedMatrix{T}; permute::Bool=true, scale::B
3434
evec = zeros(Complex{T}, n, n)
3535
j = 1
3636
while j <= n
37-
if WI[j] == 0.0
38-
evec[:,j] = VR[:,j]
37+
if WI[j] == 0
38+
evec[:,j] = slice(VR, :, j)
3939
else
40-
evec[:,j] = VR[:,j] + im*VR[:,j+1]
41-
evec[:,j+1] = VR[:,j] - im*VR[:,j+1]
40+
for i = 1:n
41+
evec[i,j] = VR[i,j] + im*VR[i,j+1]
42+
evec[i,j+1] = VR[i,j] - im*VR[i,j+1]
43+
end
4244
j += 1
4345
end
4446
j += 1
@@ -128,11 +130,13 @@ function eigfact!{T<:BlasReal}(A::StridedMatrix{T}, B::StridedMatrix{T})
128130
vecs = zeros(Complex{T}, n, n)
129131
j = 1
130132
while j <= n
131-
if alphai[j] == 0.0
132-
vecs[:,j] = vr[:,j]
133+
if alphai[j] == 0
134+
vecs[:,j] = slice(vr, :, j)
133135
else
134-
vecs[:,j ] = vr[:,j] + im*vr[:,j+1]
135-
vecs[:,j+1] = vr[:,j] - im*vr[:,j+1]
136+
for i = 1:n
137+
vecs[i,j ] = vr[i,j] + im*vr[i,j+1]
138+
vecs[i,j+1] = vr[i,j] - im*vr[i,j+1]
139+
end
136140
j += 1
137141
end
138142
j += 1

0 commit comments

Comments
 (0)