Matplotlib가 왜 그렇게 느린가요?
Python 플로팅 라이브러리를 평가할 때 성능을 고려하는 것이 중요합니다. 널리 사용되는 라이브러리인 Matplotlib는 속도가 느린 것처럼 보일 수 있으며 속도를 높이거나 대체 옵션을 모색하는 것에 대한 의문을 제기할 수 있습니다. 문제를 자세히 살펴보고 가능한 해결 방법을 살펴보겠습니다.
제공된 예는 여러 하위 플롯과 데이터 업데이트가 포함된 플롯을 보여줍니다. Matplotlib를 사용하면 이 프로세스에 축 경계 및 눈금 레이블을 포함한 모든 것을 다시 그리는 작업이 포함되어 성능이 저하됩니다.
병목 현상 이해
두 가지 핵심 요소가 속도 저하에 기여합니다.
블리팅으로 최적화
이러한 병목 현상을 해결하려면 , 블리팅 사용을 고려해보세요. 블리팅에는 그림의 특정 부분만 업데이트하여 렌더링 시간을 줄이는 작업이 포함됩니다. 그러나 효율적인 구현을 위해서는 백엔드별 코드가 필요하며 이를 위해서는 GUI 툴킷 내에 Matplotlib 플롯을 포함해야 할 수 있습니다.
GUI 중립 블리팅
GUI 중립 블리팅 기술은 백엔드 종속성 없이 합리적인 성능을 제공할 수 있습니다.
구현 예:
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)
애니메이션 모듈
최근 Matplotlib 버전에는 블리팅을 단순화하는 애니메이션 모듈이 포함되어 있습니다.
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)
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3