title: gradient descent using python and numpy
body: <pre><code>def gradient(X_norm,y,theta,alpha,m,n,num_it):
      temp=np.array(np.zeros_like(theta,float))
      for i in range(0,num_it):
          h=np.dot(X_norm,theta)
          #temp[j]=theta[j]-(alpha/m)*(  np.sum( (h-y)*X_norm[:,j][np.newaxis,:] )  )
          temp[0]=theta[0]-(alpha/m)*(np.sum(h-y))
          temp[1]=theta[1]-(alpha/m)*(np.sum((h-y)*X_norm[:,1]))
          theta=temp
      return theta
  
  
  
  X_norm,mean,std=featureScale(X)
  #length of X (number of rows)
  m=len(X)
  X_norm=np.array([np.ones(m),X_norm])
  n,m=np.shape(X_norm)
  num_it=1500
  alpha=0.01
  theta=np.zeros(n,float)[:,np.newaxis]
  X_norm=X_norm.transpose()
  theta=gradient(X_norm,y,theta,alpha,m,n,num_it)
  print theta
  </code></pre>
  
  <p>My theta from the above code is <code>100.2 100.2</code>, but it should be <code>100.2 61.09</code> in matlab which is correct.</p>