ホームページ >バックエンド開発 >Python チュートリアル >Matplotlib プロットを高速化してパフォーマンスを向上させる方法?
Matplotlib はなぜ遅いですか?
Python プロット ライブラリを評価するときは、パフォーマンスを考慮することが重要です。広く使用されているライブラリである Matplotlib は動作が遅いように見える場合があり、高速化や代替オプションの検討について疑問が生じます。問題を深く掘り下げ、考えられる解決策を検討してみましょう。
提供された例では、複数のサブプロットとデータ更新を含むプロットを示しています。 Matplotlib を使用すると、このプロセスには軸の境界や目盛りラベルを含むすべての再描画が含まれるため、パフォーマンスが低下します。
ボトルネックを理解する
速度の低下には、次の 2 つの重要な要素が影響します。
ブリッティングによる最適化
これらのボトルネックに対処するには、ブリッティングの使用を検討してください。ブリッティングでは、Figure の特定の部分のみを更新し、レンダリング時間を短縮します。ただし、効率的な実装にはバックエンド固有のコードが必要であり、GUI ツールキット内に Matplotlib プロットを埋め込む必要がある場合があります。
GUI 中立ブリッティング
GUI 中立ブリッティングこの技術は、バックエンドに依存せずに適切なパフォーマンスを提供できます:
実装例:
<code class="python">import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2*np.pi, 0.1) y = np.sin(x) fig, axes = plt.subplots(nrows=6) styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'c-'] def plot(ax, style): return ax.plot(x, y, style, animated=True)[0] lines = [plot(ax, style) for ax, style in zip(axes, styles)] # Capture Background backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes] for i in xrange(1, 2000): for j, (line, ax, background) in enumerate(zip(lines, axes, backgrounds), start=1): fig.canvas.restore_region(background) line.set_ydata(np.sin(j*x + i/10.0)) ax.draw_artist(line) fig.canvas.blit(ax.bbox)</code>
アニメーション モジュール
最近の Matplotlib バージョンには、ブリッティングを簡略化するアニメーション モジュールが含まれています:
<code class="python">import matplotlib.pyplot as plt import matplotlib.animation as animation def animate(i): for j, line in enumerate(lines, start=1): line.set_ydata(np.sin(j*x + i/10.0)) ani = animation.FuncAnimation(fig, animate, xrange(1, 200), interval=0, blit=True)</code>
以上がMatplotlib プロットを高速化してパフォーマンスを向上させる方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。