2016-11-04 15 views
2

私は行列ライブラリを使用せず、代わりに行列データのために標準のstd :: vectorを使用します。 2Dデータでそれを埋めるためにC++は2Dデータを持つ1D配列を使用します

私はこのコードを使用します。私が知りたいのですが

data[iy + dataPointsY * ix] = value; 

が、これは正しいですか、それは他の方法(IX最初)でなければならない場合です。 私の理解を深めるために、fftwには `Row-major Format 'が必要です。私はそれを使用するので、式は行優先形式に従うべきです。

+4

重要な点は、データを格納する方法は、取得する方法と正確に一致する必要があることです。 – phoxis

+0

確かに、私は他のライブラリがrow.majorフォーマットに依存していることを知っています。私はそれを使用するので、私はそれに応じてデータを注文する必要があります。 –

+0

他のライブラリが予期しているリニアフォーマットで2dインデックスをエンコードしようとすると、そのライブラリで指定されたフォーマットに正確に従わなければなりません。 MPI関数のように、行列のすべてのデータ要素はメモリ内に隣接する必要があります。 – phoxis

答えて

1

あなたは何をしたいことはある、fftwのための主要なフォーマットを行たいと仮定:組み合わせ指数は、対応する指数、1増加したときに、のポイント

data[ix + iy*dataPointsY] 

-majorあるでしょう同じ(次の行にオーバーフローしないと仮定します)。

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スタイル」マトリックスとも呼ばれ、メジャー列は「fortranスタイル」マトリックスと呼ばれます。この命名は、2つの言語間の異なる多次元配列インデックススキームによるものです。

関連する問題