Representación reducida de matrices dispersas
Una representación reducida de una matriz dispersa es una lista de listas donde cada una de las listas representa una fila de la matriz mediante listas de pares correspondientes a las snúmeros de columnas con valores no nulos de la matriz. Por ejemplo, la representacioń reducida de la matriz
1 2 3 |
( 0 0 4 ) ( 0 5 0 ) ( 0 0 0 ) |
es [[(3,4)],[(2,5)],[]].
Definir la función
1 |
reducida :: (Num a, Eq a) => Matrix a -> [[(Int,a)]] |
tal que (reducida p) es la representación reducida de la matriz p. Por ejemplo,
1 2 3 4 |
reducida (fromList 3 3 [0,0,4,0,5,0,0,0,0]) == [[(3,4)],[(2,5)],[]] reducida (identity 3) == [[(1,1)],[(2,1)],[(3,1)]] reducida (zero 9 3) == [[],[],[],[],[],[],[],[],[]] reducida (zero 9 4) == [[],[],[],[],[],[],[],[],[]] |
Soluciones
1 2 3 4 5 6 7 |
import Data.Matrix (Matrix, (!), nrows, ncols) reducida :: (Num a, Eq a) => Matrix a -> [[(Int,a)]] reducida p = [[(j,x) | j <- [1..n], let x = p!(i,j), x /= 0] | i <- [1..m]] where m = nrows p n = ncols p |
5 Comentarios