C++ 本征映射<&燃气轮机;演出

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要

我正在使用提供一些方便的数组操作,这些数据还与一些C库(特别是)接口。基本上,我需要对(大)向量集合的x、y和z分量进行FFT。正因为如此,我正试图决定使用它是否更有意义

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)
,那么设置值就容易多了。请更新您的问题,以澄清如何为它们编制索引,特别是关于您的最后一条评论。基本上,您可以使用一个
矩阵数据
,do
data.col(id(i,j,k))=Vector3d(…)
,id为一个内联函数来进行3D索引。然后,您可以选择是使用for
Opt
分别以AoS还是SoA格式存储数据
ColMajor
还是
rowmain
。(如果这是你的问题)
array<double, 3 * n> data;