更新
最后我发现了错误......错误在我的完整代码中。我是py的初学者,所以...谢谢@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
答案 0 :(得分:2)
算法内部循环内的任何计算都会使程序的速度比它们位于外部最近的词法范围内的速度慢一个数量级。
if cont==N: go_next=False
应该移到最里面的for
循环之外(就像在R程序中一样)。