[英]Why my python code is much slower than R code
更新
最終我發現了錯誤...該錯誤在我的完整代碼中。 我是py的初學者,所以...感謝@mrdomoboto指出一個錯誤。 謝謝@Spacedman,讓我創建一個可復制的示例,以便我可以回頭查看我的完整代碼。
非常抱歉,我的聲音...在提出問題之前,我將更仔細地檢查我的代碼。 我應該刪除它嗎?
#我只是在感知器算法上做一些實驗,並嘗試通過這種做法學習python。 所以我都在R和python中實現了它。 但是我發現我的python代碼比我的R代碼慢大約10倍。 實際上,我幾乎將R代碼直接轉換為python。 我真的很想知道是什么原因。 請從我的不良代碼中指出問題。
R代碼:
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
我的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
在算法的最內部循環中的任何計算,都會使程序的速度比在外部最接近的詞法范圍內的速度大一個數量級。
if cont==N: go_next=False
應該移到最里面的for
循環之外( 就像在R程序中一樣 )。
看一下計算分析 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.