De hecho, me escribió el código original en Matlab para A * B, A y B escasa. Pre-asignación de espacio para el resultado fue de hecho la parte interesante. Observamos lo que apunta a cabo Godric - que conocer el número de nonzeros en AB es tan costoso como el cálculo de AB.
Hicimos la implementación inicial de la escasa Matlab alrededor de 1990, antes del artículo de Edith Cohen que brindaba la primera forma práctica y rápida de estimar con precisión el tamaño de AB. Armamos un estimador de tamaño inferior, y si nos quedamos sin espacio en la mitad del cálculo, duplicamos la asignación y copiamos el resultado parcialmente calculado.
No sé qué hay en Matlab ahora.
Otra posibilidad sería la de calcular la columna uno AB a la vez. Cada columna puede almacenarse temporalmente en un acumulador de escasa (ver el artículo Matlab escaso para una explicación de estos), y el espacio asignado para mantener el tamaño exactamente conocida de la columna de resultados. El resultado sería en forma de columna dispersa comprimido dispersado - cada columna de CSC pero no contigüidad intercolumnas - utilizando 2 vectores de númeroColumnas longitud (Inicio col, col longitud), en lugar de uno, como meta-datos. Su forma un dispositivo de almacenamiento que puede ser digno de una mirada; tiene otra fortaleza: puede hacer crecer una columna sin reasignar toda la matriz.