### 2.37 Find all nonzero elements in a matrix

Given a matrix, ﬁnd the locations and the values of all nonzero elements. Hence given the matrix

$\left ( {\begin {array}{ccc} 0 & 0 & 1 \\ 10 & 0 & 2 \\ 3 & 0 & 0 \end {array}} \right )$

the positions returned will be $$(1,3),(2,1),(2,3),(3,1)$$ and the corresponding values are $$1,10,2,3$$.

Mathematica

In Mathematica, standard Mathematica matrix operations can be used, or the matrix can be converted to SparseArray and special named operation can be used on it.

 mat = {{0 , 0, 1}, {10, 0, 2}, {3 , 4, 0}}; sp = SparseArray[mat]; pos = sp["NonzeroPositions"]  {{1,3},{2,1},{2,3},{3,1},{3,2}}  values=sp["NonzeroValues"]  {1,10,2,3,4}  Or standard list operations can be used mat = {{0 , 0, 1}, {10, 0, 2}, {3 , 4, 0}}; (*find values not zero *) Cases[mat,x_ /;Not[PossibleZeroQ[x]]:>x,2]  {1,10,2,3,4}  (*find the index *) Position[mat,x_/;x!=0]  {{1,3},{2,1},{2,3},{3,1},{3,2}} 

 Matlab A=[0 0 1; 10 0 2; 3 4 0]; values= nonzeros(A)  values = 10 3 4 1 2  %find locations [I,J]=find(A)  I = 2 3 3 1 2 J = 1 1 2 3 3 

 Maple A:=Matrix([[0,0,1],[10,0,2],[3,4,0]]); row, col:=ArrayTools:-SearchArray(A); #values map(n->A[row[n],col[n]],[\$numelems(row)])  row, col := Vector[column](5, [2, 3, 3, 1, 2]), Vector[column](5, [1, 1, 2, 3, 3]) [10, 3, 4, 1, 2]