2016-11-04 2 views
2

저는 매트릭스 라이브러리를 사용하지 않고 대신 매트릭스 데이터 용으로 std :: vector를 사용합니다.C++은 2D 데이터로 1D 배열을 사용합니다.

data[iy + dataPointsY * ix] = value; 

내가 알고 싶습니다이 올바른이거나이 다른 방법을 (IX 첫번째)이어야합니다 :

은이 코드를 사용하여 2D 데이터를 입력합니다. 내 이해하려면 fftw '행 주요 형식'이 필요합니다. 내가 그것을 사용하기 때문에 수식은 행 주요 형식에 따라야합니다.

+4

중요한 점은 데이터를 저장하는 방식과 정확히 일치하는 방식입니다. – phoxis

+0

확실하지만 다른 libs는 row.major 형식에 의존한다는 것을 알고 있습니다. 내가 그것을 사용하기 때문에 나는 그것에 따라 데이터를 주문해야한다. –

+0

다른 라이브러리에서 기대하는 선형 형식으로 2d 색인을 인코딩하려는 경우 해당 라이브러리에서 지정한 형식을 정확하게 따라야합니다. MPI 함수와 마찬가지로 행렬의 모든 데이터 요소가 메모리에 인접 해 있어야합니다. – phoxis

답변

1

당신이 fftw을위한 주요 포맷을 행하고자 가정 할 때, 당신이 원하는 것은 :

data[ix + iy*dataPointsY] 
결합 인덱스가 1 씩 증가 할 때 - 중요한이있다 행의 점

, 해당 지수는 것 동일 (다음 행으로 넘치지 않는다고 가정).

double m[4][4]; 
mp = (double*)m; 
mp[1+2*3] == m[2][1]; //true 
mp[2+2*3] == m[2][2]; //true 
mp[2+2*3] == m[3][1]; //false 

일반적으로 매트릭스를 저장하는 올바른 방법은 없습니다. 행 주요 형식은 "C 스타일"행렬이라고도하며, 주요 행렬은 "포트란 스타일"행렬입니다. 두 언어 간의 다른 다차원 배열 색인 체계 때문에 이름이 지정됩니다.