Matplotlib이 왜 이렇게 느린가요?
Python 플로팅 라이브러리를 평가할 때 성능을 고려하는 것이 중요합니다. 널리 사용되는 라이브러리인 Matplotlib는 속도가 느린 것처럼 보일 수 있으며 속도를 높이거나 대체 옵션을 모색하는 것에 대한 의문을 제기할 수 있습니다. 문제를 자세히 살펴보고 가능한 해결 방법을 살펴보겠습니다.
제공된 예는 여러 하위 플롯과 데이터 업데이트가 포함된 플롯을 보여줍니다. Matplotlib를 사용하면 이 프로세스에 축 경계 및 눈금 레이블을 포함한 모든 것을 다시 그리는 작업이 포함되어 성능이 저하됩니다.
병목 현상 이해
두 가지 핵심 요소가 속도 저하에 기여합니다.
블리팅으로 최적화
이러한 병목 현상을 해결하려면 , 블리팅 사용을 고려해보세요. 블리팅에는 그림의 특정 부분만 업데이트하여 렌더링 시간을 줄이는 작업이 포함됩니다. 그러나 효율적인 구현을 위해서는 백엔드별 코드가 필요하며 이를 위해서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!