2012-06-26 5 views
0

큰 배열의 float 숫자 (> 200,000 숫자)를 처리하고 이러한 배열을 사용하여 몇 가지 연산을 수행해야합니다.C++에서 큰 수의 배열을 처리하는 가장 좋은 방법은 무엇입니까?

스택 오버 플로우 문제가 발생하지 않도록 이러한 배열을 처리하도록 제안하는 것이 무엇입니까?

업데이트 : 간단하고 복잡한 수학 (합계, 곱하기, 곱하기, 음, cos, arctan) 연산을 수행하고 싶습니다.

+7

스택 오버 플로우 문제가 스택에 없으면 가져올 수 없습니다. – chris

+1

당신이 그들과 함께하고 싶은 것에 달렸습니다. – m0skit0

+2

당신이 무엇을하고 싶은지 설명하면 도움이 될 것입니다. –

답변

-1

10.000을 10,000으로 처리 한 다음 모든 것을 합산하는 것이 좋습니다. 어떤 작업을하는지에 따라 다릅니다.

+0

안녕하세요, 이것은 또한 그럴듯한 제안처럼 보입니다. 그러나 나는 그것을 피하려고했습니다. 내가 관리하는지 보자! – maibaum

-3

당신이 그들과 함께하고 싶은 것에 달렸습니다.

또한 chris는 주석에서 동적으로 배열에 메모리를 할당하고 (힙에서 메모리를 가져와) 스택에 할당 된 로컬 변수로 사용하지 않도록합니다.

+2

아니요, 당신이하고있는 일을 정말로 알지 못하면 _do는 사용하지 않습니다. 그리고 심지어 더 좋은 방법이있을 것입니다. –

+0

수정 해 주셔서 감사합니다.하지만이 상황에서 새로운 것을 사용하는 것이 나쁜 이유는 누구든지 자세히 설명해 주실 수 있습니까? – m0skit0

+0

(거의) _any_ 상황에서'new'를 사용하는 것은 나쁩니다. 물론, 여러분은 여러분이 멋지다고 생각하고'new '를 가진 버퍼를 할당함으로써 예외를 던지면, 예외가 던져지고, 누출됩니다. 대신 스마트 포인터 및/또는 컨테이너를 사용하십시오. –

1

데이터가 희박한 경우 부스트의 sparse_matrixhttp://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/matrix_sparse.htm을 사용하여 데이터 구조를 나타내고 메모리 요구 사항을 크게 줄일 수 있습니다.

그렇지 않으면 데이터를 청크로 분할하고 메모리의 한 청크에서 작업 한 다음 해당 상태를 파일에 저장하고 반복하는 방법을 살펴볼 것을 제안합니다.

6

순차적으로 작동해야하는 일반 수치 데이터?

std::valarray<double> 

프로파일 링이 있다면? 더 빨리

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

가 (예, 아니오 reserve() 불행히도.

std::valarray<double> 수치 데이터가 없습니다으로 만들 수있는 방법을 찾아, 아래 당신이 둔화되고 표시되는 경우 모든 요소에 대해 작업을 수행하려면

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

자세한 내용은 a C++ reference을 참조하십시오.

reserve() 수 있기를 원하면 std::vector이 필요합니다. 괜찮 으면 사용할 수있는 수학 함수에 과부하가 없습니다.


편집 : 이것은 당신이 std::valarray들로 모든 배열에 맞게 충분한 메모리가 가정은 물론이다. 그렇지 않은 경우 200,000 개의 행을 분할하여 동시에 많은 수의 부동 소수점이 동시에 메모리에 저장되도록해야합니다.

+0

안녕하세요. 이것은 유망 해 보입니다. 데이터는 매우 평이하지는 않습니다 (서로 다른 객체를 관찰 한 결과입니다). 그렇지만 순차적으로 작업을 수행하려고합니다. 나는 결과가 무엇인지 말하기 위해 다시 돌아가려고 노력할 것이다. – maibaum

관련 문제