C++如何使用一维数组存储二维数据?

4

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

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

data[iy + dataPointsY * ix] = value;

我想知道这是否正确,或者必须是另一种方式(首先是ix)。 据我了解,fftw需要“行优先格式”。由于我使用它,因此公式应根据行优先格式编写。


4
关键点在于,存储数据的方式应该与检索数据的方式完全相同。 - phoxis
当然可以,但是我知道其他库依赖于行优先格式。因为我使用它,所以我应该根据它来排序数据。 - Matthias Pospiech
此外,如果您按列遍历矩阵(即对于单个列从上到下),那么应该考虑以列主格式存储它,因为在这种情况下,元素将是相邻的,允许使用较少的页面错误遍历大型数据集。 - phoxis
问题不在于这种格式是否“正确”。问题在于fftw库期望什么样的格式。 - Chris Drew
建议以某种方式封装索引数学。如果您一遍又一遍地输入它,迟早会出现糟糕且难以发现的拼写错误。 - user4581301
显示剩余3条评论
1个回答

3
假设您希望使用行优先格式来使用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-style”矩阵,而列主格式则称为“fortran-style”矩阵。这个命名是由于两种语言之间的多维数组索引方案不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接