【发布时间】:2016-03-05 15:17:15
【问题描述】:
我正在尝试找出在 C++ 中创建矩阵的最佳方法。到目前为止,我有两个选择:
1) 一个向量将所有数据存储在一个“行”中,但使用模和算术,可以像二维表一样访问。
或
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};
每个点都包含一个指向向量的指针(本例中为 3 个“子”向量)
Name -> name_vec = {Allen, Rick, Mary}
Course -> course_vec = {Chemistry, English, Physics}
Grade -> grade_vec = {76, 84, 93}
对矩阵的一些要求:
它需要是可增长的,这就是我选择在示例中使用向量的原因。
需要能够高效处理大量数据
它必须能够支持行插入(在末尾),行删除(从中间),将一个矩阵附加到另一个矩阵(通过将其列添加到原始矩阵的左端,如果我们可视化它就像一张桌子)
有谁知道这些选项中的一个在大输入时是否会比另一个更有效?或者,是否有人对实现这个矩阵有更好的建议?
【问题讨论】:
-
您可以查看 Boost.uBLAS。 boost.org/doc/libs/1_60_0/libs/numeric/ublas/doc/index.html
-
您是否希望主要针对速度或内存进行优化?
-
我通常使用直向量,并自己进行下标计算。对于异构数据,我可能会使用指针向量。如果您有很多空单元(稀疏矩阵)并且需要优化内存,其他选项可能更合适。
-
@flatmouse 我希望在速度和内存之间找到一个好的媒介,虽然我认为速度更重要
-
如果你假设异构数据,为什么不考虑
vector的structs?
标签: c++ performance matrix vector