よりもはるかに遅いのはなぜ更新私のPythonコードはRコード
最後に、私は間違いを見つけた...バグは私の完全なコードです。私はpyの初心者ですので、... 1つのエラーを指摘する@mrdomobotoに感謝します。ありがとう@Spacedman私は私の完全なコードを見に戻って行くことができるように、再現可能な例を作成することができます。
私の騒音で申し訳ありません...私はより慎重に私のコードをチェックしてから質問します。私はそれを削除する必要がありますか?
#私はパーセプトロンアルゴリズムに関するいくつかの実験を行っています。この練習では、Pythonを学ぼうとしています。だから私はRとPythonで両方を実装しました。しかし、私は私のPythonコードが私のRコードより約10倍遅いことがわかりました。実際には、私はほとんど私のRコードをPythonに直接変換します。私は本当に理由を知りたい。私の悪いコードから問題を指摘してください。
Rコード:
perceptron <- function(X,y,ini=c(0,0,0)){
w <- ini
N <- length(y)
continue <- T
while(continue){
cont <- 0
for(i in 1:N){
if(sign(sum(X[i,]*w)*y[i])==1){cont <- cont+1}
else{w <- w + y[i]*X[i,]}
}
if(cont==N){continue <- F}
}
return(w)
}
マイPYコード:アルゴリズムの最も内側のループの内部
def Perceptron(X,y,ini=(0,0,0)):
w = np.array(ini)
N = X.shape[0]
# add ones as the first columns of X
X = np.hstack((np.ones(N).reshape(N,1), X))
go_next = True
while go_next:
cont = 0
for i in range(N):
if np.sign(X[i,:].dot(w)*y[i]) == 1:
cont = cont + 1
else: w = w + y[i]*X[i,:]
if cont==N: go_next=False
return w
私は両方のプログラム([profiling in R](https://www.r-bloggers.com/profiling-r-code/)、[profiling in Python](http://stackoverflow.com)をプロファイルすることをお勧めします。/questions/582336/how-can-you-profile-a-script)を参照してください)。これにより、コードのどの部分が最も長くなるかについての洞察が得られます。コードが非常に似ているので、これはPythonでどの部分が長くかかるかの洞察をもたらすかもしれません。 –
この行を削除して 'go_next = True'を実行して' while True'ループを実行し、 'cont == N:go_next = False'を' cont == N:break'に変更すると、数ミリ秒quicker – WhatsThePoint
もし 'cont == N:go_next = False'がPythonコードの' for'ループの範囲内になければならないのですか? Rプログラムにはありません。 – ospahiu