yay*_*ayu 4 python matlab numpy
我是numpy的新手,我的语法已经有点不舒服了.
在Octave/matlab中可以这样写的东西
1/(2*m) * (X * theta - y)' * (X*theta -y)
Run Code Online (Sandbox Code Playgroud)
在numpy成为这个
np.true_divide(((X.dot(theta)-y).transpose()).dot((X.dot(theta)-y)),2*m)
Run Code Online (Sandbox Code Playgroud)
这对我来说编写和调试要困难得多.有没有更好的方法来编写上面的矩阵运算,以使生活更轻松?
你可以做一些简化.通过from __future__ import division在程序开头使用,所有除法将自动为"真正"除法,因此您不需要使用true_divide.(在Python 3中,您甚至不需要这样做,因为真正的除法自动成为默认值.)此外,您可以使用.T而不是.transpose().然后你的代码变成了
1/(2*m) * ((X.dot(theta) - y).T).dot((X.dot(theta) - y))
Run Code Online (Sandbox Code Playgroud)
哪个好一点.
在Python 3.5中,@基本上这个确切的原因添加了一个新的矩阵乘法运算符.这还没有出来,但是当它(并且更新numpy以使用它)时,你的代码将变得非常类似于Octave版本:
1/(2*m) * (X@theta - y).T @ (X@theta - y)
Run Code Online (Sandbox Code Playgroud)