gpt4 book ai didi

c++ - 将二维 vector 转换为 FFTW_Complex

转载 作者:行者123 更新时间:2023-11-28 01:15:42 26 4
gpt4 key购买 nike

在我的程序中我有 2D Vector喜欢(vector<vector<double>> Data(ROWS, vector<double>(COLS));),然后我实现FFTW采取FFT从我的 vector 中:

fftw_complex in[ROWS][COLS], out[ROWS][COLS];
fftw_plan g;


g = fftw_plan_dft_2d(ROWS, COLS, *in, *out, FFTW_FORWARD, FFTW_MEASURE);

如何转换我的 vectorfftw_complex in[ROWS][COLS]输入 fftw_plan_dft_2d功能。

最佳答案

std::vector<std::vector<T>> 的元素在内存中不连续,而 S[rows][cols] 的元素是连续的。要在它们之间进行转换,您必须逐行复制(和转换,如果类型 TS 不同)元素。一般解决方案:

template<typename T, typename S, class Op, std::size_t rows, std::size_t cols>
void transform_vec_vec_to_mat(const std::vector<std::vector<T>>& from, Op op, S (&to)[rows][cols]) {
assert(from.size() == rows);
for (std::size_t row = 0; row < rows; ++row) {
assert(from[row].size() == cols);
std::transform(from[row].begin(), from[row].end(), to[row], op);
}
}

std::vector<std::vector<double>> data;
std::complex<double> in[rows][cols];

const auto double_to_complex = [](double d) { return std::complex<double>{d, 0}; };
transform_vec_vec_to_mat(data, double_to_complex, in);

请记住,可以将实际输入视为一种特殊情况,以节省计算时间和空间。参见 the official documentation了解更多详情。

关于c++ - 将二维 vector 转换为 FFTW_Complex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58797777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com