2016-05-23 2 views
1

私が作業している機械学習プロジェクトの視覚化を行っています。私はプロットに対してmatplotlibを使用しています。 matplotlibのバックエンドはQt4Aggです。プロットされた点の数は100未満です。pyplotのパンとズームは非常に遅い

パンとズームは非常に遅いです。あなたはこれの理由を知ることができますか?

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

from classifier import Classifier 

cl = Classifier(1) 
with open("./data/enolase-01.bounds") as file: 
    data = file.read().strip().split("\n") 
    xdim = int(data[7].split(" ")[-1]) 
    ydim = int(data[8].split(" ")[-1]) 
    zdim = int(data[9].split(" ")[-1]) 

fig = plt.figure() 
ax = fig.add_subplot(111, projection="3d") 

for i, n in enumerate(cl.X[0]): 
    z = i % zdim 
    y = i/zdim % ydim 
    x = i/zdim/ydim % xdim 
    if n == 0.0: 
     continue 
    ax.scatter([x], [y], [z], c='r', marker="o") 
    #print x, y, z 


ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 

plt.show() 
+1

あなたのコードには、何が起こっているのかを説明するものはありません。ただし、あなたの例を[MCVE](https://stackoverflow.com/help/mcve)に減らし、機能を再度確認することを検討してください。チャンスはスローダウンが他のコードと関連していることです。また、 'enumerate'はタプルを返します。最初の要素は整数(インデックス)で、2番目の要素はイテレータの要素です。あなたの(表示された)コードは、 'import classifier ... 'を削除し、numpyの' ndarray'を使って 'ax.scatter'を一度呼び出すだけで減らすことができます。 問題がどこにあるかを知るために、まずコードを減らしてください。 –

+0

私は、問題は私が散乱方法を何度も呼び出していることを知っていました。私は700点以上のポイントごとに1回呼びます。それぞれは散布図です。すべてを単一の呼び出しにすると、パンとズームのすべての遅れが取り除かれました。 –

答えて

1

私は、スキャッターをあまりにも多くの時間呼び出すことが問題であることを知りました。私は700点以上のポイントごとに1回呼びます。それぞれは散布図です。すべてを単一の呼び出しにすると、パンとズームのすべての遅れが取り除かれました。