私がこれをしたら...
vector< array<double,2> > magT(magnitude.size(), array<double,2>() );
for ( int n = 0; n < magnitude.size()-amount; n++ ) {
for ( int chan = 0; chan < channels; chan++ ) {
for ( int m = 0; m < amount; m++ ) {
magT.at(n).at(chan) += magnitude.at(n+m).at(chan);
}
magT.at(n).at(chan) /= amount;
}
}
magnitude = magT;
...電光石火の速さです。しかし、このようなifステートメントをいくつか追加すると...
vector< array<double,2> > magT(magnitude.size(), array<double,2>() );
int upper = ceil(amount/2);
int lower = floor(-amount/2);
for ( int n = 0; n < magnitude.size(); n++ ) {
for ( int chan = 0; chan < channels; chan++ ) {
for ( int m = lower; m < upper; m++ ) {
m = n+m < 0 ? 0 : m;
m = n+m > magnitude.size()-1 ? 0 : m;
magT.at(n).at(chan) += magnitude.at(n+m).at(chan);
}
magT.at(n).at(chan) /= amount;
}
}
magnitude = magT;
...数百倍、おそらく数千倍遅いです。論理ステートメントは本当にこれほど遅いのでしょうか? このようなネストされたループからそれらを遠ざける必要がありますか? もしそうなら、どうすればこのようなことを合理的に達成できますか?