mirror of
https://github.com/kalmarek/PropertyT.jl.git
synced 2024-10-15 08:05:35 +02:00
Sparsification of a dense matrix is not required to be rank preserving
This can bite!
This commit is contained in:
parent
972697e2ba
commit
6df4c790c0
@ -72,23 +72,18 @@ function sparsify!{Tv,Ti}(M::SparseMatrixCSC{Tv,Ti}, eps=eps(Tv))
|
|||||||
return M
|
return M
|
||||||
end
|
end
|
||||||
|
|
||||||
function sparsify!{T}(U::AbstractArray{T}, eps=eps(T); check=true)
|
function sparsify!{T}(M::AbstractArray{T}, eps=eps(T); check=false, verbose=false)
|
||||||
if check
|
densM = dens(M)
|
||||||
W = deepcopy(U)
|
rankM = rank(M)
|
||||||
else
|
M[abs.(M) .< eps] .= zero(T)
|
||||||
W = U
|
|
||||||
|
if check && rankM != rank(M)
|
||||||
|
warn(logger, "Sparsification decreased the rank!")
|
||||||
end
|
end
|
||||||
|
|
||||||
W[abs.(W) .< eps] .= zero(T)
|
|
||||||
|
|
||||||
if check
|
|
||||||
info("Sparsification would decrease the rank!")
|
|
||||||
W = U
|
|
||||||
else
|
|
||||||
info("Sparsified density:", rpad(dens(U), 15), "→", rpad(dens(W),15))
|
|
||||||
end
|
end
|
||||||
W = sparse(W)
|
|
||||||
return W
|
return M
|
||||||
end
|
end
|
||||||
|
|
||||||
sparsify{T}(U::AbstractArray{T}, tol=eps(T)) = sparsify!(deepcopy(U), tol)
|
sparsify{T}(U::AbstractArray{T}, tol=eps(T)) = sparsify!(deepcopy(U), tol)
|
||||||
|
Loading…
Reference in New Issue
Block a user