Académique Documents
Professionnel Documents
Culture Documents
Resumen
El estudio muestra la forma en la que se debe
almacenar una matriz dispersa en formato CSR
(Compressed Sparse Row) y se demuestra cómo es
la eficiencia y su evolución con respecto al método
antecesor coordenado.
1
Universidad Politécnica Salesiana de Cuenca 2
Facultad de ingeniería mecatrónica.
Autor para correspondencia: pablohcc10@hotmail.com
1
1. Introducción 1.2. Instrucciones para ocupar el método
de almacenamiento CRS(Compressed
Sparse Row)
Una matriz dispersa consta de elementos que en
su mayoría son ceros y que al momento de
El método de almacenamiento CRS es creado para
almacenarlos dentro de un formato o un lenguaje
almacenar y/o resolver problemas de carácter
de programación llevan demasiadas unidades de
aplicativos, problemas que ocupan matrices dispersas,
programación es decir mas de las necesarias.
es decir para poder realizar problemas y resolverlos
El informe muestra de forma detallada como se con operaciones matemáticas con ayuda de un
ocupa el método de almacenamiento CSR programa.
(Compressed Sparse Row) y su forma de aplicación.
Este formato se lo ocupa en su mayoría al momento Se trata de ahorrar lo mayor posible el gasto
de empezar una programación o almacenamiento de computacional que se produce al ejecutar el ejercicio
datos en un programa. con la menor cantidad de bites ocupados ordenando la
información en tres vectores, este proceso se lo puede
la utilización masiva de los ordenadores en los ´ ´ últimos mandar a ejecutar en un programa en donde se anoten
años y el aumento de su potencia y capacidad de cálculo, las matrices dispersas y de resultado nos de las tres
han permitido que la ciencia, técnica e ingeniería utilicen series con la información suficiente de la matriz.
cada vez más modelos matemáticos para comprender,
simular y optimizar fenómenos de diversa complejidad, y Uno de los mayores problemas del COO es el
que esos modelos crezcan extraordinariamente en malgasto de memoria al guardar las columnas y
magnitud y exactitud. Muchos de estos modelos conllevan las filas. Para reducir este gasto el formato CSR
enfrentarse con matrices de un tamaño tal que hace solo Propone reducir el array de filas.” (Medina,
unos pocos años era casi inimaginable que se pudiesen 2017)
tratar (cientos de miles de filas y columnas) (O`Conor)
1. Materiales y Métodos
1.1 Optimizar el tiempo y generar menos
gasto computacional. Para almacenar una matriz dispersa en formato CRS
se lo organiza en tres series:
El formato CSR (Compressed Sparse Row), es una
evolución del método COO (Coordinado) ambas
-La serie de valores:
ocupan un orden que consta de 3 series o array donde
el formato COO muestra la ubicación de cada valor
Esta serie consta de los valores de cada elemento
ocupando dos series y con la tercera fila enseña el tomándolo desde el valor de la primera fila y
valor numérico de cada elemento. El formato CRS primera columna y siguiendo la fila.
muestra a la matriz con las dos series de los valores
y de las columnas igual a formato anterior pero la -La serie de filas o punteros:
diferencia está en el array de las filas, la mejorada
forma de almacenamiento muestra tan solo la Esta es la serie que diferencia al formato CSR
ubicación de los primeros elementos en el sentido de del comando COO, pues al momento en vez de
las filas. Esta evolución es la que da un uso más dar coordenada de cada elemento esta se centra
apropiado para problemas aplicables con matrices en decir los punteros o valores de cada fila
dispersas. empezando desde la derecha. La siguiente tabla
nos muestra la forma de ahorro en términos de
2
Apellido Autor et al / Titulo del Articulo
Las
3
Apellido Autor et al / Titulo del Articulo
4. Referencias
2. Resultados y Discusión
El formato CSR para lograr almacenar una matriz
dispersa de una forma eficiente, aunque no tengamos
todavía el conocimiento para lograr programar un
ejercicio se logra diferenciar analógicamente el ahorro
de tiempo en el momento de realizar un ejercicio que
conste de matrices que en su mayoría son ceros.
3. Conclusiones
Los avances de la tecnología hacen que la información
cada vez sea más detallada y compleja. Las matrices
dispersas pueden convertirse en herramientas
computacionales muy útiles, pero su uso
indiscriminado puede empeorar el consumo de
memoria y los tiempos de procesamiento.
4
Apellido Autor et al / Titulo del Articulo
Anexos
5
Apellido Autor et al / Titulo del Articulo
}
}
}
Código de programación del programa: }
Posicion A
} // Fin de Matriz Transpuesta
/**************************************
*****/ //Presenta los VECTORES DE GENERADOS
/****** INICIA EL PROGRAMA PRINCIPAL POR A printf("VECTORES GENERADOS DE
*******/ LA MATRIZ A\n"); linea();
/**************************************
*****/ int main( ) { // Variables
locales int cc1, cc2, cp1, cp2, // Presenta el Vector de Datos
limaux1, limaux2; printf ("\n VECTOR DATOS - Matriz A
\n");
printf("\n");
// Ingresamos los datos en la Matriz A for
printf("****** INGRESE LOS ELEMENTOS DE (i=0;i<c;i++) {
LA MATRIZ A ********\n"); for (i=0;i<M; printf("%d\t", VA[i]);
i++) { }
for (j=0; j<M; j++) { linea();
printf("A[%d][%d]\t",i,j); //
scanf("%d", &aux); Presenta
A[i][j]= aux; el Vector
} Columna
printf("\n"); printf
} ("\n
VECTOR
// Ingresamos los datos en la Matriz B COLUMNA -
printf("****** INGRESE LOS ELEMENTOS Matriz A
DE LA MATRIZ B ********\n"); for \n"); printf("\n");
(i=0;i<M; i++) { for (i=0;i<c;i++) {
for (j=0; j<M; j++) printf("%d\t", CA[i]);
{ } linea();
printf(" B[%d][%d]\t",i,j); // Presenta el Vector Posición de la
scanf("%d", &aux); Matriz A
B[i][j]= printf ("\n VECTOR POSICION - Matriz A
aux; } \n"); printf("\n"); for
printf("\n"); } (i=0;i<(M+1);i++) {
linea(); printf("%d\t", PA[i]);
} linea();
// Imprime la Matriz A printf("\n");
printf("********** DATOS DE LA MATRIZ getch();
A linea();
************\n"); presenta_m(A); //Presenta los datos de la Matriz B
tamano_vector(A); // LLama la printf(" ********** DATOS DE LA MATRIZ
subrutina para calcular los datos de B **********\n"); presenta_m(B); // llama
la Matriz A diferentes de cero a la matriz B y presenta sus datos
linea();
// Elimina los ceros de la Matriz A
int PA[M+1], CA[c], VA[c]; //Creamos //Ejecuta la Matriz transpuesta
los vectores auxiliares para que transpuesta(B); // Genera la matriz
almacenen los datos del METODO Transpuesta que es parte del metodo que
aplicado crea_vector(A, VA, CA, PA); se aplica linea(); printf("**********
// Llama la subrutina que crea los DATOS DE LA MATRIZ TRANSPUESTA B
vectores linea(); ********** \n"); presenta_m(T); //llama a
int TCA = c; // Tamaño de vector Datos los datos de la Matriz Transpuesta c=0;
y Columnas A tamano_vector(B); //Calcula el nuemro
int TPA = M+1; // Tamaño del Vector de elementos diferentes de cero de la
matriz Transpuesta B // Creamos las
7
Apellido Autor et al / Titulo del Articulo
8
Apellido Autor et al / Titulo del Articulo
}
}
else
{
if((cc1 <= TCA)) {
jj = limPB; //Avanza en vector
columna B ib = ib +1;
//Avanza el vector posicion de B
limPB = limPB + (PB[ib+1]- PB[ib]);
// Calculamos el nuevo limite del
Vector Posicion B
}
}
}
// Fin del Proceso para multiplicar las
Matrices Dispersas sobre la base de los
Vectores columna y posicion
linea
();
//Proceso para imprimir la Matriz
Resultante
printf("LA MATRIZ RESULTANTE ES: \n");
printf("\n"); linea(); linea();
printf("\n"); c = 0; for(j=0;j< M;j++){
printf("|\t"); for (i=0; i<M; i++)
{ printf("%d\t", VR[c]);
c = c+1; } printf("|\n"); }
getch(); return 0;