不做程序员很久很久了,但还是对python充满了兴趣,随手记录一些学习的过程和代码,以后用的时候可以参考。
我是在windows10上用 multipass 安装ubuntu18.04的,很方便,直接一个multipass launch命令就可以启动一个最新版本的ubuntu,对于我这种特别容易把系统和环境搞乱的人特别有效。multipass参考网址 https://multipass.run/
打算启动一个名叫stupy的ubuntu实例。使用如下命令启动并连接实例之后,尝试python和python3命令,发现python3已经安装。
multipass launch -n stupy
multipass shell stupy
我是打算玩一玩python的数据计算和机器学习方面的功能,于是尝试安装numpy等包,但没有pip,于是使用如下命令安装pip3(基于python3的pip)。
sudo apt update
sudo apt install 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/67abc32382d9 启发安装IPython和Jupyter Notebook来加强python的数据处理交互和展现能力:
pip3 install IPython
pip3 install notebook
然后运行 jupyter notebook 就会启动 http://localhost:8888 来验证是否安装成功。这里因为是纯命令行的ubuntu,因此需要回到外部系统打开浏览器来测试。