В чем отличия между различными бугорными ublas разреженными векторами?

В boost::numeric::ublas существуют три разреженных типа векторов.

Я вижу, что mapped_vector по существу является stl::map от индекса к значению, который считает все не найденные значения равными 0 (или что-то общее).

Но документация разрежена (ха-ха) по информации о compressed_vector и coordinate_vector.

Кто-нибудь может уточнить? Я пытаюсь выяснить алгоритмическую сложность добавления элементов к различным векторам, а также точечных произведений между двумя такими векторами.

Очень полезный ответ показал, что сжатый_vector очень похож на compress_matrix. Но кажется, что, например, сжатое хранилище строк предназначено только для хранения матриц, а не только для векторов.

Я вижу, что unbounded_array - тип хранилища, но я не совсем уверен, что спецификация для этого. Если я создаю сжатый_vector размером 200 000 000, но только с 5 ненулевыми местоположениями, это менее эффективно, чем создание сжатого_vector с размерами 10 и 5 ненулевых местоположений?

Большое спасибо!

Ответы