c ++使用带有2D数据的1D数组

时间:2016-11-04 15:24:45

标签: c++ arrays fftw

我不使用任何矩阵库,而是使用plain std :: vector作为我的矩阵数据。

要用2D数据填充,我使用以下代码:

data[iy + dataPointsY * ix] = value;

我想知道这是正确的还是必须是另一种方式(首先是ix)。 据我所知,fftw需要' Row-major Format'。由于我使用它,公式应该按行主格式。

1 个答案:

答案 0 :(得分:3)

假设你想要fftw的行主格式,你想要的是:

data[ix + iy*dataPointsY]

-major的点是,当组合索引增加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样式”矩阵,而列主要称为“fortran-style”矩阵。命名是由于两种语言之间的多维数组索引方案不同。