我想将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的要求确实对齐了内存。