2020-02-02 学习ubuntu和python(1)

不做程序员很久很久了,但还是对python充满了兴趣,随手记录一些学习的过程和代码,以后用的时候可以参考。

我是在windows10上用multipass安装ubuntu18.04的,很方便,直接一个multipass launch命令就可以启动一个最新版本的ubuntu,对于我这种特别容易把系统和环境搞乱的人特别有效。multipass参考网址 https://multipass.run/

打算启动一个名叫stupy的实例。启动 multipass launch -n stupy 并连接 multipass shell stupy 实例之后,尝试python和python3命令,发现python3已经安装。

我是打算玩一玩python的数据计算和机器学习方面的功能,于是尝试安装numpy等包,但没有pip,于是使用 sudo apt install python3-pip 安装(先运行一次 sudo apt update 更新),安装完后pip3(基于python3的pip)就可以用了。

安装一些相关依赖包 pip3 install numpy pandas scipy matplotlib 这些包之间的关系可以参考这篇文章 https://www.quora.com/What-is-the-relationship-among-NumPy-SciPy-Pandas-and-Scikit-learn-and-when-should-I-use-each-one-of-them

另外使用 python3 -V 查询到当前python版本是3.6.9,不是3.8.1最新版,但晚上查询更新python比较复杂,两个版本使用不一样的文件路径,还要用重定向什么的。我估计我使用不到那么新的功能,就保留3.6.9这个版本先用着吧。

然后就启动python3并做一些测试吧!这次先不保存文件,直接使用几行代码做一些测试:

>>> from numpy import *
>>> randMat = mat(random.rand(4, 4))
>>> randMat
matrix([[0.55689236, 0.7743607 , 0.74879372, 0.35693523],
        [0.43856915, 0.55167566, 0.44636307, 0.61456016],
        [0.03713953, 0.55513451, 0.70315538, 0.96554297],
        [0.26218718, 0.15071786, 0.69539776, 0.83468039]])
>>> invRandMat = randMat.I
>>> invRandMat
matrix([[-0.16855087,  2.09300269, -2.10810994,  0.96966025],
        [ 0.3634699 ,  0.64481515,  1.20223764, -2.02092325],
        [ 1.80970312, -3.07622829,  0.18641386,  1.27544623],
        [-1.52040594,  1.78901845,  0.28979828,  0.19578066]])
>>> myEye = randMat * invRandMat
>>> myEye
matrix([[ 1.00000000e+00, -4.66209524e-17,  1.00459848e-16,
         -2.73459291e-17],
        [ 4.18376691e-17,  1.00000000e+00, -5.25449109e-17,
         -1.47357873e-16],
        [-5.94180019e-17, -3.69257080e-16,  1.00000000e+00,
          3.42718360e-16],
        [ 1.67147495e-16,  2.16262745e-16, -9.21661096e-17,
          1.00000000e+00]])

简单解释一下,rand命令用来生成随机数或数组,mat用来形成一个矩阵,.I命令用来求矩阵的逆矩阵,两者相乘的结果为对角线元素为1、其他元素为0的单位矩阵,eye命令生成一个标准的单位矩阵,两者相减所有元素应该都为0,但实际运行结果有一些极小误差,比如这样子:

>>> myEye - eye(4)
matrix([[ 2.22044605e-16, -4.66209524e-17,  1.00459848e-16,
         -2.73459291e-17],
        [ 4.18376691e-17, -1.11022302e-16, -5.25449109e-17,
         -1.47357873e-16],
        [-5.94180019e-17, -3.69257080e-16,  0.00000000e+00,
          3.42718360e-16],
        [ 1.67147495e-16,  2.16262745e-16, -9.21661096e-17,
          0.00000000e+00]])

做一个实际数学应用吧,比如利用矩阵求解二元一次方程组。比如:2x-7y=8和3x-8y=10 很容易用小学知识代入法得x=1.2 y=-0.8

而使用矩阵的二阶行列式方法,首先把方程组写成:2 * x0 + (-7) * x1 = 8 和 3 * x0 + (-8) * x1 = 10 然后使用代码:

>>> a = array([[2, -7], [3, -8]])
>>> b = array([8, 10])
>>> x = linalg.solve(a, b)
>>> x
array([ 1.2, -0.8])

然后验证答案是否正确:

>>> allclose(dot(a, x), b)
True

https://www.jianshu.com/p/f2c1a37bef7b

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
PyTorch
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论