0

我需要处理大量浮点数(>200,000 个数字)并使用这些数组执行一些数学运算。

您建议如何处理这些数组,以免出现任何堆栈溢出问题?

更新:我想做简单和复杂的数学(总和、乘积、sin、cos、arctan)运算。

4

4 回答 4

6

您需要按顺序操作的纯数字数据?

std::valarray<double>

如果分析显示这会减慢您的速度,请寻找使其更快的方法

std::valarray<double>::resize()

(是的,不幸的是没有reserve()

为什么std::valarray<double>要使用数值数据?如果要对每个元素执行操作,只需调用

std::valarray<double>::apply(somefunction)

有关更多信息,请参阅:C++ 参考

如果您希望能够reserve(),您将需要std::vector,这也很好,但没有您可能想要使用的数学函数的重载。


编辑:这当然是假设您有足够的内存来将所有数组放入std::valarrays. 如果没有,您应该将 200,000 行拆分,以便同时只有这么多的浮点数在内存中。

于 2012-06-26T18:24:38.413 回答
1

如果您的数据稀疏,您可以使用 boost 的sparse_matrix http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/matrix_sparse.htm来表示您的数据结构并显着降低内存需求。

否则,我建议研究将数据拆​​分为块并在内存中处理一个块的方法,然后将该状态存储到文件中并重复。

于 2012-06-26T18:05:48.867 回答
-1

我建议您将它们视为每 10.000 中的 10.000,然后将所有内容相加?这取决于你在做什么操作。

于 2012-06-26T17:53:46.730 回答
-3

取决于你想用它们做什么。

此外,正如克里斯在评论中所说,为您的数组动态分配内存(从堆中获取内存)并避免将其用作局部变量(在堆栈中分配)。

于 2012-06-26T17:55:48.610 回答