Estoy confundido sobre cómo funciona boost :: compressed_matrix. Supongamos que declaro la compressed_matrix como esto:aumentar los conceptos básicos de la matriz comprimida
boost::numeric::ublas::compressed_matrix<double> T(1000, 1000, 3*1000);
Esto asigna espacio para 3 * 1000 elementos en una matriz de 1000x1000. Ahora, ¿cómo le doy las ubicaciones que son los elementos distintos de cero? ¿Cuándo y cómo se establecen los elementos distintos de cero? ¿Es cada vez que asigno un elemento en la matriz, p. B (4,4) = 4, ¿marcaría ese elemento como distinto de cero?
Realmente apreciaría si pudiera ayudarme a aprender esto usando un ejemplo si es posible. Alguna idea de la implementación interna sería genial. Quiero asegurarme de no escribir programas que son subóptimos por trabajo de adivinación.
gracias!
¿hay alguna ventaja de especificar el tercer argumento constructor - no de elementos distintos de cero? ¿Qué pasa si no lo especifico? – user236215
Si comienza con 'unbounded_array' que es demasiado corto para contener todos sus no-ceros, crecerá automáticamente según sea necesario, causando asignaciones de memoria y muchas copias que suceden cada vez que se escribe un elemento distinto de cero en la matriz que excede la capacidad. Bueno, en la práctica, crece en pedazos, como 'std :: vector' en' push_back', por lo que no lo verá en cada escritura: experimento con el ejemplo anterior: hacer mi matriz comprimida (3, 3) y agrega no-ceros a cuatro elementos diferentes. – Cubbi