C++ 在STL向量中存储矩阵信息。哪个是更好的向量还是向量中的向量?

C++ 在STL向量中存储矩阵信息。哪个是更好的向量还是向量中的向量?,c++,matrix,C++,Matrix,我已经创建了我自己的矩阵类,在类中,有关矩阵的信息存储在STL向量中。我注意到,在搜索web时,有些人使用向量向量来表示矩阵信息。我的最佳猜测告诉我,只要矩阵很小或很薄(row_num>>column_num),那么差异就应该很小,但是如果矩阵是正方形或胖的(row_num您是否考虑过使用现成的矩阵表示法,例如boost,而不是重新发明轮子 例如,如果您有很多空行,使用嵌套表示法可以节省大量空间。除非您在实际用例中有特定信息表明一种方法不符合您的要求,否则请以最容易维护和正确实现的方式编写代码。

我已经创建了我自己的矩阵类,在类中,有关矩阵的信息存储在STL向量中。我注意到,在搜索web时,有些人使用向量向量来表示矩阵信息。我的最佳猜测告诉我,只要矩阵很小或很薄(row_num>>column_num),那么差异就应该很小,但是如果矩阵是正方形或胖的(row_num您是否考虑过使用现成的矩阵表示法,例如boost,而不是重新发明轮子


例如,如果您有很多空行,使用嵌套表示法可以节省大量空间。除非您在实际用例中有特定信息表明一种方法不符合您的要求,否则请以最容易维护和正确实现的方式编写代码。

有太多变量无法回答您的问题

创建一个抽象,这样你的代码就不会关心矩阵是如何表示的。然后使用任何实现编写你的代码。然后分析它

如果你的矩阵是稠密的,“向量向量”不太可能比一个大内存块快,也可能慢。(为了随机访问而追逐两个指针+更差的局部性。)

如果你的矩阵是大而稀疏的,那么你的问题的正确答案可能是“两者都不是”


因此,创建一个抽象的接口,编码一些东西,并对其进行配置。(正如马克所说,有很多第三方库你应该考虑。)如果你用一个向量来存储所有的东西,一个迭代器将遍历整个矩阵。如果你使用一个向量向量,迭代器只会遍历一个维度。

如果你的矩阵类只是数值的:你应该考虑使用STD::ValSalm。更简单。如果你已经有了满足你需要的东西,我就不担心了。你对你现有的类有什么担心吗?对于我正在做的事情,我只需要乘法、转置、求逆(Cholesky Decomp.)还有可能是加法。所以我正在尝试尽可能多地利用开销。如果我有更多的阵列经验,我可能会走这条路。而且,矩阵会很密集。一些矩阵将接近10000乘10000,并且会有很多这样的矩阵。我试着提高它,当它们达到10000时,速度会非常慢矩阵密集、正定且非常大(约10000x1000)。那么,性能的关键是算法中的良好局部性,而不管底层的表示形式如何。为了获得最佳性能,您需要了解系统的缓存层次结构,并编写算法来利用它。选择表示形式可以使任务更简单…难以在注释中填入详细信息…我将开始基本上,一级缓存比二级缓存快5-10倍,二级缓存比三级缓存快5-10倍,三级缓存比DRAM快5-10倍。你需要知道它们有多大,以及你的CPU如何管理它们来编写高性能向量代码。谢谢你!我甚至不知道我想知道这些。