c ++将一维数组与二维数据一起使用
c++ use 1D Array with 2D Data
我不使用任何矩阵库,而是使用纯 std::vector 作为我的矩阵数据。
要用二维数据填充它,我使用以下代码:
data[iy + dataPointsY * ix] = value;
我想知道这是正确的还是必须是另一种方式(ix first)。
据我了解,fftw 需要 'Row-major Format'。因为我使用它,所以公式应该根据行优先格式。
假设您想要 fftw
的行主要格式,您想要的是:
data[ix + iy*dataPointsY]
row-major的重点在于,当组合索引增加1时,对应的row索引相同(假设不会溢出到下一行)。
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
一般来说,没有 "right" 存储矩阵的方法。行主格式也称为"C-style"矩阵,而列主格式称为"fortran-style"矩阵。命名是由于两种语言之间的多维数组索引方案不同。
我不使用任何矩阵库,而是使用纯 std::vector 作为我的矩阵数据。
要用二维数据填充它,我使用以下代码:
data[iy + dataPointsY * ix] = value;
我想知道这是正确的还是必须是另一种方式(ix first)。 据我了解,fftw 需要 'Row-major Format'。因为我使用它,所以公式应该根据行优先格式。
假设您想要 fftw
的行主要格式,您想要的是:
data[ix + iy*dataPointsY]
row-major的重点在于,当组合索引增加1时,对应的row索引相同(假设不会溢出到下一行)。
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
一般来说,没有 "right" 存储矩阵的方法。行主格式也称为"C-style"矩阵,而列主格式称为"fortran-style"矩阵。命名是由于两种语言之间的多维数组索引方案不同。