我将犰狳用于线性代数。我设置了一个相当大的向量(至少 35000000 个元素)。我有另一个长度为大向量一半的向量。我正在使用 fftw 对大向量进行傅立叶变换,但数据的前半部分是从小向量复制的,如下所示
#include <armadillo>
#include <iostream>
#include <iomanip>
#include <fstream>
#include "fftw3.h"
using namespace std;
using namespace arma;
int main(void)
{
arma::Col<double> v1, v2;
v1.resize(35000000);
v2.resize(17500000);
// initialize v2
for (int i=0; i<4096; i++) // repeat 4096 times
{
v1.rows(0, 17500000) = v2;
fftw_complex* in = reinterpret_cast<fftw_complex*>(v1.colptr(0));
fftw_plan plan = fftw_plan_dft_1d(35000000, in, in, FFTW_FORWARD, FFTW_MEASURE);
v2 = v1.rows(0, 175000000);
}
}
这段代码非常慢,因为我们需要将元素从 v2 复制到 v1 并向后复制。无论如何让v1的元素引用v2而不是副本?