簡體   English   中英

為什么我的python代碼比R代碼慢很多

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM