Saya benar-benar menulis kode asli di Matlab untuk A * B, baik A dan B jarang. Pra-alokasi ruang untuk hasilnya memang bagian yang menarik. Kami mengamati apa yang Godric tunjukkan - bahwa mengetahui jumlah nonzeros di AB sama mahalnya dengan menghitung AB.
Kami melakukan implementasi awal Matlab yang jarang sekitar tahun 1990, sebelum makalah Edith Cohen yang memberikan cara praktis dan cepat pertama untuk memperkirakan ukuran AB secara akurat. Kami mengumpulkan estimator ukuran lebih rendah, dan jika kami kehabisan ruang di pertengahan perhitungan, menggandakan alokasi dan menyalin hasil yang dihitung sebagian.
Saya tidak tahu apa yang ada di Matlab sekarang.
Kemungkinan lain adalah menghitung AB satu kolom pada satu waktu. Setiap kolom dapat disimpan sementara dalam akumulator jarang (lihat kertas Matlab jarang untuk penjelasannya), dan ruang yang dialokasikan untuk menampung ukuran kolom hasil yang diketahui dengan tepat. Hasilnya akan dalam bentuk kolom terkompresi jarang tersebar - setiap kolom dalam CSC tetapi tidak ada persentuhan antar kolom - menggunakan 2 vektor numcol panjang (mulai col, panjang col), bukan satu, sebagai meta-data. Ini adalah bentuk penyimpanan yang layak untuk dilihat; ia memiliki kekuatan lain - Anda dapat menumbuhkan kolom tanpa merealokasi seluruh matriks.