簡體   English   中英

在C ++中處理大型數字數組的最佳方法是什么?

[英]What is the best way to treat large arrays of numbers in C++?

我需要處理大型浮點數數組(> 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 如果不是,則應拆分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一樣對待它們,然后將所有內容相加? 這取決於您正在執行的操作。

取決於您要如何處理它們。

另外,正如克里斯在評論中所說,為數組動態分配內存(從堆中獲取內存),並避免將其用作局部變量(在堆棧中分配)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM