線形代数には Armadillo を使用しています。かなり大きなベクトル (少なくとも 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を参照するようにしますか?