-1

1 つのスクリプトを実行して 100 個の浮動小数点数をリストに保存するとします。ほとんどの場合、処理にいくらかのメモリが必要です。したがって、このコードがアプリケーションの要件として毎回実行されると、パフォーマンスが低下します。私の質問は、パフォーマンスを向上させるために効率を維持する方法です。

モックアップ コード:

def generate_lglt():
    float1, float2 = 27.2423423, 12.2323245
    lonlats = []
    for val in range(100, 0, -1):
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
        lonlats.append(random.uniform(float1, float2))
    print lonlats

ありがとう。

4

2 に答える 2

8

ボトルネックは予期しない場所で発生するため、改善を試みるのに適したコードである可能性があるという理由だけでコードを最適化ないでください。あなたがする必要があるのは

  1. プログラムが完全に実行されるように作成します。
  2. プログラムが正しいことを確認するためのテストを作成します。
  3. プログラムが遅すぎるかどうかを判断します。
    • この段階で辞める可能性は十分にあります。
  4. プログラムを現実的に実行するパフォーマンス テストを開発します。
  5. モジュールを使用して、現実的なパフォーマンス テストでコードをプロファイリングしcProfileます。
  6. コードのパフォーマンスを向上させることができるアルゴリズムの改善点を見つけてください。
    • これは通常、速度を最も向上させる方法です。
  7. ジョブに最適なアルゴリズムを使用している場合は、マイクロ最適化を実行します。
    • 重要な部分を C で (おそらく Cython を使用して) 書き直すことは、多くの場合、Python でのマイクロ最適化よりも効果的です。
于 2010-03-16T20:01:20.900 に答える
2

generate_lglt() が何度も呼び出される場合、コードの呼び出しごとに同じ範囲 (100,0,-1) を再生成しないようにすることができます。生成された範囲をどこかにキャッシュして、何度も使用したい場合があります。

また、各反復を完了せずに for ループを終了する場合は、range の代わりに xrange を使用します。

于 2010-03-16T19:23:31.323 に答える