我想将fftw_complex数组映射到Eigen MatrixXcd并返回:我发现了这一点:

MatrixXcd m1 = MatrixXcd::Map(reinterpret_cast<complex<double>*>(m1f), n1, n2);


但似乎很慢

最佳答案

这应该可以解决性能问题:

MatrixXcd::Map<MatrixXcd> m1(reinterpret_cast<complex<double>*>(m1f), n1, n2);


问题是您将Map对象分配给Matrix对象。这迫使Eigen将映射的矩阵复制到Matrix对象分配的内存中。

此外,您可能要考虑使用MatrixXcd::Map<MatrixXcd, Aligned>。这告诉Eigen,由m1f指向的内存已正确对齐以进行矢量化。但是,当然,您必须确保按照Eigen的要求确实对齐了内存。

09-04 16:55