C++ c++;将一维数组与二维数据一起使用

C++ c++;将一维数组与二维数据一起使用,c++,arrays,fftw,C++,Arrays,Fftw,我不使用任何矩阵库,而是对矩阵数据使用普通的std::vector 要用二维数据填充它,我使用以下代码: data[iy + dataPointsY * ix] = value; 我想知道这是正确的还是必须是另一种方式(首先是ix)。 据我所知,fftw需要“行主格式”。因为我使用它,所以公式应该根据行主格式。假设您想要fftw的行主格式,您需要的是: data[ix + iy*dataPointsY] 行主索引的要点是,当组合索引增加1时,相应的行索引将是相同的(假设没有溢出到下一行) 一

我不使用任何矩阵库,而是对矩阵数据使用普通的std::vector

要用二维数据填充它,我使用以下代码:

data[iy + dataPointsY * ix] = value;
我想知道这是正确的还是必须是另一种方式(首先是ix)。
据我所知,fftw需要“行主格式”。因为我使用它,所以公式应该根据行主格式。

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

data[ix + iy*dataPointsY]
行主索引的要点是,当组合索引增加1时,相应的行索引将是相同的(假设没有溢出到下一行)


一般来说,没有“正确”的方法来存储矩阵。行主格式也称为“C样式”矩阵,而列主格式称为“fortran样式”矩阵。命名是由于两种语言之间的多维数组索引方案不同。

关键是,它们存储数据的方式应该与检索数据的方式完全相同。当然,但我知道其他LIB依赖于row.major格式。因为我使用它,所以我应该根据它对数据进行排序。如果您试图以其他库所期望的线性格式对2d索引进行编码,那么您必须完全遵循该库指定的格式。与MPI函数一样,矩阵中的所有数据元素都应该在内存中相邻。如果遍历矩阵,(即一列的顶部到底部),那么您应该考虑将其存储在列主格式中,因为在这种情况下,元素将是相邻的,允许在较小的页面错误中遍历大型数据集。问题不在于此格式是否“正确”。问题是fftw库需要什么格式。
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