Skip to content

Commit

Permalink
Minor improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
andreasvarga committed May 18, 2023
1 parent 1949856 commit f7a2276
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions src/lstools.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1341,30 +1341,34 @@ function lsbalance!(A::AbstractMatrix{T}, E::Union{AbstractMatrix{T},UniformScal
lmul!(sc,MA)
lmul!(sc,MB)
lmul!(sc,MC)
t = sqrt(sumcr/sumM); dleft = fill(t,n); dright = fill(t,n)
t = sqrt(sumcr/sumM); Dl = Diagonal(fill(t,n)); Dr = Diagonal(fill(t,n))
# Scale left and right to make row and column sums equal to r and c
conv = false
for i = 1:maxiter
conv = true
cr = sum(MA,dims=1)
withC && (cr .+= sum(MC,dims=1))
dr = reshape(cr,n)./c;
rdiv!(MA,Diagonal(dr)); rdiv!(MC,Diagonal(dr))
er = minimum(dr)/maximum(dr); dright ./= dr
dr = Diagonal(reshape(cr,n)./c)
rdiv!(MA,dr); rdiv!(MC,dr)
er = minimum(dr.diag)/maximum(dr)
rdiv!(Dr,dr)
cl = sum(MA,dims=2)
withB && (cl .+= sum(MB,dims=2))
dl = reshape(cl,n)./r;
ldiv!(Diagonal(dl),MA); ldiv!(Diagonal(dl),MB)
el = minimum(dl)/maximum(dl); dleft ./= dl
dl = Diagonal(reshape(cl,n)./r)
ldiv!(dl,MA); ldiv!(dl,MB)
el = minimum(dl.diag)/maximum(dl)
rdiv!(Dl,dl)
max(1-er,1-el) < tol/2 && break
conv = false
end
conv || (@warn "the iterative algorithm did not converge in $maxiter iterations")
# Finally scale the two scalings to have equal maxima
scaled = sqrt(maximum(dright)/maximum(dleft))
dleft .*= scaled; dright ./= scaled
pow2 && (dleft = radix .^(round.(Int,log2.(dleft))); dright = radix .^(round.(Int,log2.(dright))))
Dl = Diagonal(dleft); Dr = Diagonal(dright)
scaled = sqrt(maximum(Dr)/maximum(Dl))
rmul!(Dl,scaled); rmul!(Dr,1/scaled)
if pow2
Dl = Diagonal(radix .^(round.(Int,log2.(Dl.diag))))
Dr = Diagonal(radix .^(round.(Int,log2.(Dr.diag))))
end
lmul!(Dl,A); rmul!(A,Dr)
lmul!(Dl,E); rmul!(E,Dr)
lmul!(Dl,B)
Expand Down

2 comments on commit f7a2276

@andreasvarga
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator register()

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/83837

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v1.7.8 -m "<description of version>" f7a227697b4bbc6c17046ed9421aa72d8107159d
git push origin v1.7.8

Please sign in to comment.