C++ 本征映射<&燃气轮机;演出
我正在使用提供一些方便的数组操作,这些数据还与一些C库(特别是)接口。基本上,我需要对(大)向量集合的x、y和z分量进行FFT。正因为如此,我正试图决定使用它是否更有意义C++ 本征映射<&燃气轮机;演出,c++,arrays,eigen,fftw,pointer-arithmetic,C++,Arrays,Eigen,Fftw,Pointer Arithmetic,我正在使用提供一些方便的数组操作,这些数据还与一些C库(特别是)接口。基本上,我需要对(大)向量集合的x、y和z分量进行FFT。正因为如此,我正试图决定使用它是否更有意义 array<Eigen::Vector3d, n> vectors; 数组向量; (这会使FFTW调用更麻烦,因为我需要一个指向第一个double的指针)或者 数组数据; (这将使线性代数/向量积更加麻烦,因为我必须用Eigen::Map包装数据块)。一点经验测试表明,构建映射比构建特征::Vector3d要
array<Eigen::Vector3d, n> vectors;
数组向量;
(这会使FFTW调用更麻烦,因为我需要一个指向第一个double的指针)或者
数组数据;
(这将使线性代数/向量积更加麻烦,因为我必须用Eigen::Map
包装数据块)。一点经验测试表明,构建映射
比构建特征::Vector3d
要慢30%左右,但在探索这一点时,我很容易将我的用例过于简化。是否有充分的理由选择一种设计而不是另一种?我倾向于使用第二种方法,因为数据
在将其内容视为“我可以随意解释的双
的集合”时,抽象性较少
编辑:对于隐式Eigen::Vector3d
对齐,可能有一些话要说,但是我假设向量
和数据
以相同的方式对齐基础的双精度。为什么不使用矩阵xD
或矩阵x3D
并将各个向量传递到它们需要去的任何地方?@AviGinsburg公平的问题!这是因为傅里叶变换实际上是一个3d FFT,数据需要一个由问题确定的非常特殊的结构(正确位置的零)。如果我能做表[x][y][z]=Eigen::Vector3d(fx,fy,fz)
,那么设置值就容易多了。请更新您的问题,以澄清如何为它们编制索引,特别是关于您的最后一条评论。基本上,您可以使用一个矩阵数据
,dodata.col(id(i,j,k))=Vector3d(…)
,id为一个内联函数来进行3D索引。然后,您可以选择是使用forOpt
分别以AoS还是SoA格式存储数据ColMajor
还是rowmain
。(如果这是你的问题)
array<double, 3 * n> data;