1. 학습
  2. /
  3. 강의
  4. /
  5. 効率的なPythonコードの書き方

Connected

연습 문제

%lprun を使う:ボトルネックを修正する

前の演習では、convert_units() 関数をプロファイルし、new_hts のリスト内包表記がボトルネックになり得ることを確認しました。new_wts のリスト内包表記も、実行時間の同程度の割合を占めていたことに気づきましたか? これは、new_hts と new_wts を別の方法で作成したほうがよいことを示しています。

各ヒーローの身長と体重は numpy 配列に保存されているので、リスト内包表記ではなく配列のブロードキャストで変換できます。以下の関数にその方法を実装しています。

def convert_units_broadcast(heroes, heights, weights):

    # Array broadcasting instead of list comprehension
    new_hts = heights * 0.39370
    new_wts = weights * 2.20462

    hero_data = {}

    for i,hero in enumerate(heroes):
        hero_data[hero] = (new_hts[i], new_wts[i])

    return hero_data

line_profiler パッケージを IPython セッションに読み込みましょう。次に、%lprun を使って、スーパーヒーローのデータに対して動作する convert_units_broadcast() 関数をプロファイルしてください。convert_units_broadcast() 関数、heroes リスト、hts 配列、wts 配列はすでにセッションに読み込まれています。コーディングが終わったら、次の質問に答えてください。

convert_units_broadcast() 関数全体の実行時間に対して、new_hts 配列のブロードキャストを行うコード行に費やされた時間の割合はどれくらいですか?

지침

50 XP

가능한 답변