我不确定这是否是这个问题的地方,但它就在这里。
我正在研究 C++ 中的计算物理模型,我收到了一个正在整理的大代码。
该领域是量子电子学,所以有很多积分和表达式,但我的问题是关于优化。
最初代码需要 4 小时才能完成模拟,我在消除了几个瓶颈后将其整理到了 30 分钟。
我仍然不喜欢的是代码中的数据(主要是数组类型double
)混合std::vector<(double)>
,std::valarray<(double)>
和犰狳的arma::vec
.
其中哪一种是最好的方法,我什至应该尝试为数组创建统一的数据类型?
我认为以前的博士生使用的原因valarray
是它的友好性,因为运算符*
, /
, +
,-
超载并且有一些稀缺的在线承诺valarray
s 比向量更快(关于此的在线大辩论)。犰狳被引入,因为它与 MATLAB 语法和文档库非常相似,并且std::vector<(T)>
在 T 是类而不是双精度时保留。
我个人更喜欢犰狳,因为它的逻辑非常简单,感觉很自然,valarray
有时会因为它们没有很多成员函数而让我烦恼,但是通过它们迭代很容易,向量很烦人,算术运算符不会重载 for <(double)>
and if我选择了这些,我可能需要为 Array of s 创建自己的类,double
而我真的不想这样做。
请记住,我不知道这些数组在内存中的行为方式,我去年开始使用 C++,还有很长的路要走。我计划为另外 2 个维度(目前是 1D)开发此代码,并且执行时间肯定会增加。
因此,我正在寻求关于我应该继续使用哪种数组类型的建议,以及我是否应该使代码统一(强制所有数组为double
同一类型(std::valarray
或std::vector
)arma::vec
)