我想弄清楚在C++中创建矩阵的最佳方法。到目前为止,我有两个选项:在C++中实现大输入矩阵的最有效方法?
1)一个存储所有数据在一个“行”中,但使用模数和算术的向量可以像二维表一样访问。
OR
2)保持指向其他载体的载体,使得原始矢量表示的一组列和它指向包含下去每一列的行中的值的向量。
例如,如果我们有像这样的表:
Name | Course | Grade
Allen | Chemistry | 76
Rick | English | 84
Mary | Physics | 93
我的第一个例子将所有数据存储在一个向量是这样的:
my_vec = {Name, Course, Grade,
Allen, Chemistry, 76,
Rick, English, 84,
Mary, Physics, 93}
(假设的异质性存储在同一个向量中的值现在不是问题)
我的第二个示例将存储数据,如下所示:
vec1 = {Name, Course, Grade};
当每个斑点将包含一个指向矢量
Name -> name_vec = {Allen, Rick, Mary}
Course -> course_vec = {Chemistry, English, Physics}
Grade -> grade_vec = {76, 84, 93}
在基质上的一些要求(在本实施例3的“子”的载体。):
它需要这就是为什么我在我的例子中选择使用矢量的原因。
它需要能够处理大量数据的有效
它必须能够支持行插入(在结束时),行的删除(从中间),附加一个矩阵到另一个(通过将其列到原始矩阵的左端,如果我们想象它像一个表)
有谁知道,如果这些选项之一是显著比其他更有效的大投入?或者,有没有人有更好的建议来实现这个矩阵?
您可以检查Boost.uBLAS。 http://www.boost.org/doc/libs/1_60_0/libs/numeric/ublas/doc/index.html – mustafagonul
您是否希望主要针对速度或内存进行优化? – wally
我通常使用一个直矢量,并做我自己的下标计算。对于异构数据,我可能会使用指针向量。如果您有很多空单元(稀疏矩阵)并需要优化内存,其他选项可能更合适。 – Logicrat