【python讲线代】S03E01 向量和矩阵的python描述

0.本集概览

1.本季思路:用python工具把线性代数使用起来,告别乏味
2.行、列向量的表示方法
3.矩阵的表示方法及矩阵的转置
4.方阵、零矩阵、单位矩阵及对角矩阵等特殊矩阵

这一季,我们从线性代数出发,开始重新学习数据科学中的数学基础。

1.不再是那个大学里令人乏味的线性代数!

谈到线性代数,很多同学的第一印象一定是大块大块的数字,密密麻麻的。在脑中不停的出现各种转换、各种运算以及夹杂着各种生僻字的名词术语

这可能是国内许多大学里数学教学的通病吧,重计算过程而轻几何物理意义。一个学期下来,听听课,算算题,考考试,结束!而对于很多重要的定理,能做题,但是却不一定十分清楚定理到底是怎么来的、为了干啥以及为什么就出现在了这。

这也是我们专栏一直以来的努力方向,我们认为数学应该意义清晰、表现直观。因此,我们这一季的思路是:通过描述线性代数的空间几何意义,来展现他的卓越之处,通过python工具,来切切实实的把线性代数用起来,用线性代数来解决高大上的问题,而不是沉溺于其本身的计算技巧的细节。试想再牛逼的笔算技巧,在计算机面前似乎也没有什么意义。

2.向量的表示

线性代数的数据结构基础是向量和矩阵,他是数据描述和计算的核心载体。大家对向量和矩阵长什么样应该不会陌生,本集先用python语言来描述一下向量和矩阵的基本形态,为后续章节介绍其空间几何意义以及数据运算方法打下一个基础。

2.1.我们通常使用列向量

首先我们从向量说起,向量的概念很简单,把数字排成一行(列)就是向量。比如:
$ \begin{bmatrix} 4\\5 \end{bmatrix} $, $ \begin{bmatrix} -4\\5\\6.7 \end{bmatrix} $ 这种元素竖排的,称为列向量,对应的元素横排的自然称为行向量,比如: $ \begin{bmatrix} 4&5&7 \end{bmatrix} $。

在没有特殊说明的情况下,我们提到向量,都是默认为列向量,在排版的时候,由于列向量比较占空间,因此一般写成行向量的转置:$ \begin{bmatrix} -4&5&6.7 \end{bmatrix} ^{T}$ 。

在我们原来的常识印象中,似乎行向量更为直观呀,这里为什么如此偏爱列向量呢?这和后面反复介绍的向量的线性映射有关。将一个矩阵 $ A$ 所表示的线性映射作用于某向量 $x$ 时,我们习惯于将其写作 $Ax$ ,而这种写法的运算基础便是:$x$ 是一个列向量。这个内容后面会反复细讲,这里请先记住:一般我们都用列来表示向量。

2.2.用python来表示向量

好,那对应的,如何在python中生成行向量和列向量呢?
代码片段:

import numpy as np

A = np.array([1,2,3,4])
print(A)

运算结果:

[1 2 3 4]

python中用NumPy库来生成一个向量,默认生成的是行向量,但正如我们上面所说的,一般情况下我们通常使用的是列向量,因此还需要对此做一些处理。

你的第一感觉可能会想,用一用转置这个概念(后面会详细讲解),也就是把向量的行索引和列索引交换位置,但是python中的转置方法在一维向量里是无效的。
代码片段:

import numpy as np

A = np.array([1,2,3,4])
print(A.transpose())

运行结果:

[1 2 3 4]

那我们应该如何来表示一个列向量呢?具体的做法我来演示一下:
代码片段:

import numpy as np

A = np.array([1, 2, 3, 4])
A_t = A[:, np.newaxis]
print(A_t)
print(A_t.shape)

运行结果:

[[1]
 [2]
 [3]
 [4]]

(4, 1)

这样,我们就把一个行向量转换成列向量了。但是是不是觉得看上去有点略复杂?有没有更简单的?有,慢慢往下看。

3.矩阵的表示

3.1.矩阵的生成

矩阵最直观浅显的定义就是一个 $n\times m$ 的数字方阵,比如我们想初始化一个 $2\times 3$ 的矩阵 $A$ :$\begin{bmatrix} 1 & 2 & 3 \\ 0.4 & -4 & 2 \end{bmatrix}$,可以使用NumPy中的嵌套数组来完成。
代码片段:

import numpy as np

A = np.array([[1, 2, 3], [0.4, -4, 2]])
print(A)
print(A.shape)

运行结果:

[[ 1.   2.   3. ]
 [ 0.4 -4.   2. ]]

(2, 3)

同时,我们强调一下,在形容矩阵的规模的时候,一般用其行数和列数来描述,对应到代码中,我们通过矩阵 $A$ 的shape属性,就获取了一个元组来描述他 $2$ 行 $3$ 列的规模。

3.2.方阵:行列相等的矩阵

矩阵中有一类特殊的矩阵,就是行数和列数相等的矩阵,我们称之为方阵,其行数或列数称之为他的阶数,这里我们看到的就是一个 $3$ 阶方阵 $\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9\end{bmatrix}$。
代码片段:
```
import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6],[7, 8, 9]])
print(A)

top Created with Sketch.