最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
type(AM)
numpy.matrix
关于两种对象类型的选取,此处进行简单说明:
* NumPy中的matrix类型对象和MATLAB中的matrix类型等价,和NumPy中数组类型对象底层基本结构不同;
* 在NumPy中,针对大规模数据,数组类型对象的计算速度要快于矩阵类型对象;
* 矩阵类型对象可以通过运算符直接进行矩阵乘法,而二维数组要进行矩阵乘法(及其他矩阵运算),则必须要使用包括linalg(线性代数运算)模块在内的相关函数。
AM * AM
matrix([[3, 4],
[2, 3]])
A.dot(A)
array([[3, 4],
[2, 3]])
新版NumPy也支持使用符号进行矩阵乘法
A @ A
array([[3, 4],
[2, 3]])
为了执行更高效的计算、以及确保代码整体基本对象类型统一,课程如无说明,将统一使用二维数组表示矩阵。
#### 2.NumPy中特殊矩阵构造方法
在实际线性代数运算过程中,经常涉及一些特殊矩阵,如单位矩阵、对角矩阵等,相关创建方法如下:
| **函数** | **描述** |
| --- | --- |
| a.T | 数组a转置 |
| np.eye(n) | 创建包含n个分量的单位矩阵 |
| np.diag(a1) | 以a1中各元素,创建对角矩阵 |
| np.triu(a) | 取矩阵a中的上三角矩阵 |
| np.tril(a) | 取矩阵a中的下三角矩阵 |
**下面将展示一些矩阵的基本操作:**
创建一个2*3的矩阵
a1 = np.arange(1, 7).reshape(2, 3)
a1
array([[1, 2, 3],
[4, 5, 6]])
转置
a1.T
array([[1, 4],
[2, 5],
[3, 6]])
>
> 矩阵的转置就是每个元素行列位置互换
>
>
>
创建单位矩阵
np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>
> 单位矩阵之所以被称为“单位”,核心原因在于单位矩阵和任何矩阵相乘,都将返回原矩阵。
>
>
>
a = np.arange(5)
a
array([0, 1, 2, 3, 4])
np.diag(a)
array([[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 2, 0, 0],
[0, 0, 0, 3, 0],
[0, 0, 0, 0, 4]])
对角线向上偏移一位
np.diag(a, 1)
array([[0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 2, 0, 0],
[0, 0, 0, 0, 3, 0],
[0, 0, 0, 0, 0, 4],
[0, 0, 0, 0, 0, 0]])
对角线向下偏移一位
np.diag(a, -1)
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 2, 0, 0, 0],
[0, 0, 0, 3, 0, 0],
[0, 0, 0, 0, 4, 0]])
a1 = np.arange(9).reshape(3, 3)
a1
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
取上三角矩阵
np.triu(a1)
array([[0, 1, 2],
[0, 4, 5],
[0, 0, 8]])
上三角矩阵向左下偏移一位
np.triu(a1, -1)
array([[0, 1, 2],
[3, 4, 5],
[0, 7, 8]])
上三角矩阵向右上偏移一位
np.triu(a1, 1)
array([[0, 1, 2],
[0, 0, 5],
[0, 0, 0]])
下三角矩阵
np.tril(a1)
array([[0, 0, 0],
[3, 4, 0],
[6, 7, 8]])
#### 3.NumPy中矩阵基本运算
由于NumPy中我们使用二维数组来表述矩阵,因此二维数组也就具备了数组和矩阵的两重属性。其中数组属性决定的基本运算相对简单,基础运算(如加减乘除)就是对应位置元素进行逐元素计算,而矩阵属性决定的运算则稍显复杂,当然矩阵的相关线性代数运算将在下一小节讨论,在基础运算上,矩阵和数组核心的区别在于乘法运算。
当然,从另一个角度考虑,其实对于向量和矩阵这种具备一定结构的对象,有很多种容易混淆的计算规则。对于常用的计算规则,我们通过将其划分成三类以帮助大家理解:
| **描述** | **解释/函数** |
| --- | --- |
| 逐元素相乘 | 向量、矩阵通用 |
| 每个对应位置元素相乘 | \* |
| 逐元素相乘后相加 | 也被称为点积(内积),向量,矩阵通用 |
| 向量点积 | vdot、dot、inner |
| 矩阵点积 | vdot |
| 矩阵乘法 | 代数学意义的矩阵相乘 |
| 矩阵乘法 | dot、matmul、@ |
* \* :逐元素相乘
a = np.arange(4)
a
array([0, 1, 2, 3])
a * a
array([0, 1, 4, 9])
A = a.reshape(2, 2)
A
array([[0, 1],
[2, 3]])
A * A
array([[0, 1],
[4, 9]])
* 向量点积
所谓点积(也被称为内积),指的是向量或矩阵对应位置元素相乘后相加。向量点积有三种实现方法,分别是dot、vdot和ineer。
np.dot(a, a)
14
a.dot(a)
14
(a * a).sum()
14
np.vdot(a, a)
14
np.inner(a, a)
14
* 矩阵点积
值得注意的是,矩阵内积只有vdot一种方式实现。
A
array([[0, 1],
[2, 3]])
np.vdot(A, A)
14
(A * A).sum()
14
>
> 注意,高维数组的inner并不是内积,而是一种类似tensordot的沿着尾轴实现和积的计算过程,该方法并不通用,此处暂不做介绍。
>
>
>
* 矩阵乘法
NumPy中,我们可以使用诸多方法实现矩阵乘法,包括dot、@、matmul等。
a1 = np.arange(1, 7).reshape(2, 3)
a1
array([[1, 2, 3],
[4, 5, 6]])
a2 = np.arange(1, 10).reshape(3, 3)
a2
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
矩阵乘法
np.matmul(a1, a2)
array([[30, 36, 42],
[66, 81, 96]])
此处也简单回顾矩阵乘法运算,上述相乘过程如下所示:
![5](https://img-blog.csdnimg.cn/img_convert/36df4390ff19a8bab94b663fedd19391.jpeg)
>
> 值得注意的是,矩阵相乘要求左乘矩阵列数和右乘矩阵行数相同,而内积计算过程则严格要求两个向量/矩阵形状完全一致。
>
>
>
#### 4.NumPy中矩阵代数运算
如果说矩阵的基本运算是矩阵基本性质,那么矩阵的线性代数运算,则是我们利用矩阵数据类型在求解实际问题过程中经常涉及到的线性代数方法,具体相关函数如下:
矩阵的线性代数运算
| **函数** | **描述** |
| --- | --- |
| np.trace(A) | 矩阵的迹 |
| np.linalg.matrix\_rank(A) | 矩阵的秩 |
| np.linalg…det(A) | 计算矩阵A的行列式 |
| np.linalg.inv(A) | 矩阵求逆 |
同时,由于线性代数所涉及的数学基础知识较多,从实际应用的角度出发,我们将有所侧重的介绍实际应用过程中需要掌握的相关内容,并通过本节末尾的实际案例,来加深线性代数相关内容的理解。
>
> NumPy中的linalg是linear algebra(线性代数)的简写,也是NumPy中保存线性代数相关计算函数的模块。
>
>
>
* 矩阵的迹(trace)
矩阵的迹的运算相对简单,就是矩阵对角线元素之和,在NumPy中,可以使用trace函数进行计算。
A = np.array([[1, 2], [4, 5]])
A
array([[1, 2],
[4, 5]])
np.trace(A)
6
当然,对于矩阵的迹来说,计算过程不需要是方正
B = np.arange(1, 7).reshape(2, 3)
B
array([[1, 2, 3],
[4, 5, 6]])
np.trace(B)
6
* 矩阵的秩(rank)
矩阵的秩(rank),是指矩阵中行或列的极大线性无关数,且矩阵中行、列极大无关数总是相同的,任何矩阵的秩都是唯一值,满秩指的是方阵(行数和列数相同的矩阵)中行数、列数和秩相同,满秩矩阵有线性唯一解等重要特性,而其他矩阵也能通过求解秩来降维,同时,秩也是奇异值分解等运算中涉及到的重要概念。
>
> 所谓线性相关,其实也就是线性表示,如果
>
>
>
>
> y
>
>
> =
>
>
> w
>
>
> x
>
>
> +
>
>
> b
>
>
>
> y=wx+b
>
>
> y=wx+b,我们则称y可以由x线性表示,二者线性相关,反之则线性无关。类似,如果
>
>
>
>
> y
>
>
> =
>
>
>
> w
>
>
> 1
>
>
>
>
> x
>
>
> 1
>
>
>
>
> w
>
>
> 2
>
>
>
>
> x
>
>
> 2
>
>
>
> +
>
>
> b
>
>
>
> y=w\_1x\_1w\_2x\_2+b
>
>
> y=w1x1w2x2+b,则我们称y可以由
>
>
>
>
>
> x
>
>
> 1
>
### 一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
### 二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)
### 三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**