今日、これに出くわしました。線幅が1.0未満の場合、matplotlibで線をプロットする方がはるかに高速であるようです。これは Mac でしかテストしていませんが、効果は非常に強いようです。
たとえば、このコードを試すと、線幅 1.0 よりも線幅 0.5 の方が約 10 倍高速にデータがプロットされることがわかります。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,20000)
y = np.sin(x) + np.random.random(len(x))*0.1
plt.ion()
plt.show()
plt.plot(x,y,lw=0.5)
plt.draw()
plt.figure()
plt.plot(x,y,lw=1.0)
plt.draw()
このコードを使用して、線幅と速度の関係のグラフを作成しました。
import numpy as np
import matplotlib.pyplot as plt
import time
x = np.linspace(0,10,10000)
y = np.sin(x) + np.random.random(len(x))*0.1
plt.ion()
plt.show()
linewidths = np.linspace(2,0,20)
times = []
for lw in linewidths:
t = time.time()
plt.plot(x,y,lw=lw)
plt.draw()
times.append(time.time()-t)
plt.figure()
plt.ioff()
plt.plot(linewidths[1:],times[1:],'ro')
plt.xlabel('Linewidth (points)')
plt.ylabel('Time (seconds)')
plt.show()
結果は次のとおりです。
1.0 未満の線幅を使用すると、最大 10 倍のスピードアップが得られ、1.0 以降では時間が直線的に増加します。この効果は、データポイントの数が多く、約 5000 ポイントを超える場合にのみ観察されます。より多くのピクセルを表示するようにmatplotlibに依頼すると、プロットの作成に少し時間がかかる可能性があることは理にかなっていますが、わずかに小さい線幅(0.5対1.0)を使用した場合の大幅な高速化は期待していませんでした.
なぜこれが起こるのか誰でも説明できますか?大規模なデータセットを表示するのがはるかに高速になるため、それを発見してうれしく思います。
これは MacOSX バックエンドに固有のものである可能性があると示唆する人もいました。これは可能性が高いようです。プロットを画面にプロットする代わりに png 形式で保存しようとすると、時間はよりランダムに分布しているように見えます。