1

我正在以压缩行格式实现稀疏矩阵类。这意味着我有固定数量的行,每行由许多元素组成(这个数字对于不同的行可能不同,但在矩阵初始化后不会改变。

是否适合通过向量向量来实现这一点,还是会以某种方式分割内存?

我应该如何实现这个分配,所以我将拥有一大块内存?

感谢您分享您的智慧!短剑

4

4 回答 4

4

您可以使用现有的库,例如提升稀疏矩阵(http://www.boost.org/doc/libs/1_43_0/libs/numeric/ublas/doc/matrix_sparse.htm

于 2010-07-23T15:29:56.183 回答
0

我已经用 3 实现了压缩列格式std::vector<int>(2 用于行和列索引,1 用于值)。为什么需要std::vector<std::vector<int>>

你确定你正在实施正确的格式吗?可以在此处找到压缩列格式(和矩阵向量乘法的代码)的描述。

于 2010-07-23T15:49:40.840 回答
0

向量向量不会得到“一大块”。每行将是一个连续的块,但每行的数据可能位于堆上的不同位置。

请记住,如果您要处理巨大的矩阵,这可能是一件好事。矩阵越大,您就越不可能获得适合整个事物的连续块。

于 2010-07-23T15:53:49.713 回答
0

稀疏矩阵的一般规则是选择最适合矩阵中非零位置的结构;所以也许你可以写更多关于矩阵结构的内容,以及将在其上调用什么(某种)算法。
关于内存——如果这个矩阵不是太大,最好把它分配成一大块,让索引变魔术;这可能会导致更好的缓存使用。如果它很大,那么应该使用分块版本,因为它更适合内存。

于 2010-07-23T16:03:41.173 回答