我需要处理大量浮点数(>200,000 个数字)并使用这些数组执行一些数学运算。
您建议如何处理这些数组,以免出现任何堆栈溢出问题?
更新:我想做简单和复杂的数学(总和、乘积、sin、cos、arctan)运算。
我需要处理大量浮点数(>200,000 个数字)并使用这些数组执行一些数学运算。
您建议如何处理这些数组,以免出现任何堆栈溢出问题?
更新:我想做简单和复杂的数学(总和、乘积、sin、cos、arctan)运算。
您需要按顺序操作的纯数字数据?
std::valarray<double>
如果分析显示这会减慢您的速度,请寻找使其更快的方法
std::valarray<double>::resize()
(是的,不幸的是没有reserve()
。
为什么std::valarray<double>
要使用数值数据?如果要对每个元素执行操作,只需调用
std::valarray<double>::apply(somefunction)
有关更多信息,请参阅:C++ 参考。
如果您希望能够reserve()
,您将需要std::vector
,这也很好,但没有您可能想要使用的数学函数的重载。
编辑:这当然是假设您有足够的内存来将所有数组放入std::valarray
s. 如果没有,您应该将 200,000 行拆分,以便同时只有这么多的浮点数在内存中。
如果您的数据稀疏,您可以使用 boost 的sparse_matrix
http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/matrix_sparse.htm来表示您的数据结构并显着降低内存需求。
否则,我建议研究将数据拆分为块并在内存中处理一个块的方法,然后将该状态存储到文件中并重复。
我建议您将它们视为每 10.000 中的 10.000,然后将所有内容相加?这取决于你在做什么操作。
取决于你想用它们做什么。
此外,正如克里斯在评论中所说,为您的数组动态分配内存(从堆中获取内存)并避免将其用作局部变量(在堆栈中分配)。