Opposite function to Normal

Is there any function opposite to Normal? For example, let as say that I have an SparseMatrix A, then, let as say that for convenience for a certain operation like Packing, I convert it into an Array by doing

A=Normal[A];


and afterwards, I want A to became an SparseArray again.

Is there anyway to do this without the need to define the matrix A again?

Thanks

• In case there is no such function, a way to solve this problem is to define A_backup =A, then, A=Normal[A] and afterwards A=A_backup. Commented Dec 15, 2013 at 17:41
• SparseArray[A]
– ssch
Commented Dec 15, 2013 at 17:42
• @ssch thankyou! Commented Dec 15, 2013 at 17:44

If the background value is 0 just run SparseArray on it:

sp = SparseArray[Band[{1, 1}] -> 1, {100, 100}];
ByteCount[sp]
(* 2152 *)

nrm = Normal[sp];
ByteCount[nrm]
(* 40168 *)

sp2 = SparseArray[nrm];
ByteCount[sp2]
(* 2152 *)


If it has another background value do SparseArray[nrm, Automatic, background], if you don't know the background value use the commonest element, which is First@Commonest[Flatten@nrm]

• what is the background value? Commented Dec 15, 2013 at 17:49
• @Mencia the default value that is used where nothing else is specified in the SparseArray e.g. SparseArray[Band[{1,1}]->9, {5,5}, Infinity]//Normal//MatrixForm
– ssch
Commented Dec 15, 2013 at 17:54
• but the best is to specify them as zero right? since zero terms will not take up memory in the SparseArray Commented Dec 15, 2013 at 17:59
• @Mencia Doesn't matter what it is, SparseArray only stores information representing position and value for places where the value is not equal to the background value, so for memory use it doesn't matter what the background happens to be. However 0 is very common and is usually what you want (this is why Mathematica assumes you want 0 unless you specify otherwise)
– ssch
Commented Dec 15, 2013 at 18:04
• @Mencia Here's link to some documentation: tutorial/SparseArrays-ManipulatingLists. It implies what ssch says here, but it's not as clear as this answer. :) Commented Dec 15, 2013 at 18:09