2

約10000個の要素を持つdouble*の配列があり、そこから平均値を減算する必要があります。そして、これは多くのことをやめなければなりません。

今、私はそれをやめました。

double mt = 0;
for (int i=0; i<n; i++) {mt += array[i];}
mt /= n;
for (int i=0; i<n; i++) {array[i] -= mt;}

これにより、配列:double&nの大きな配列は、その配列のサイズになります。いくつかの派手なキャラクターでそれを実装する方法があると確信しています。それははるかに高速であり、皆さんがそれを手伝ってくれることを願っています。

乾杯マグ

4

5 に答える 5

0

あなたの解決策は私にはうまく見えます。

使用することはできますstd::transformが、それ以上読みやすくなることはないと確信しています。

于 2013-03-15T12:23:15.040 に答える
0

これを頻繁に行う必要がある場合は、現在の合計と配列内のアイテムの数だけを保持しないのはなぜですか?

その場合、平均を計算するための合計は複雑さO(1)になります。

于 2013-03-15T12:24:08.777 に答える
0

これは少し短い方法で実行できますが、パフォーマンスはそれほど向上しません。std::accumulateから 使用<algorithm>

double mean = std::accumulate(array, array + n)/double(n);

ただし、最初に計算してから次の反復で合計から単純に減算することを覚えておくことができます(mt * n)(質問に示されているのは反復間で発生する変更であると想定しています。

于 2013-03-15T12:24:12.757 に答える
0

total_valueのアクティブなコピーを保持することにより、毎回平均の計算をスキップできます。同じテーブル自体から平均を再帰的に減算する必要がある場合は、次の式を使用して合計を見つけることができます。

new_total = old_total-n * prev_mean; new_mean = new_total / n;

于 2013-03-15T12:31:32.797 に答える
0

うーん、低レベルでは何も実装されていないようです。

とにかく答えてくれてありがとう。

于 2013-03-15T13:14:39.530 に答える