math专栏 03.线性代数基础

 

 

 

# 01.向量基础运算

[toc]{type: "ol", level: [2, 3, 4, 5]}

### 向量概念
::: tip
向量是一维数组,由n个数构成
几何意义:**空间中的点 (x, y, z)**{style="color:goldenrod"}
物理意义:矢量 例如:速度、力
向量的分量:维度
R^n^: n维向量集合的全体 n维欧式空间
:::


### 向量分类
#### 行向量
    按照行将向量排开

#### 列向量
    按照列将向量排开

#### 转置T
    将行列向量进行转换
        编程语言默认将向量存储为行向量
        单行:要使用reshape命令更改, 不可使用T
        多行:不可使用reshape命令更改, 要使用T


### 向量运算
#### 加法
```python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a)
print(b)
c = a + b
print(c)
```
![向量](imgs/01.png)

#### 减法
```python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 行数未知,改为1列
aa = a.reshape(-1, 1)
bb= b.reshape(-1, 1)
print(aa)
print(bb)
cc = aa - bb
print(cc)
```
![向量](imgs/02.png)

#### 乘法
```python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
x = a * 12
y = a * b
print(x)
print(y)
```
::: details result
\[12 24 36]
\[ 4 10 18]
:::

#### 除法
```python
import numpy as np
a = np.array([1, 2, 3])
x = a / 2
print(x)
```
::: details result
\[0.5 1 1.5]
:::

#### 内积
    两个向量的内积会成为一个标量
```python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.dot(a, b)
```
::: details result
32
:::

#### 运算法则
    A + B + C = A + (B + C)
    K * (X + Y) = KX + KY

 

# 02.向量的范数

[toc]{type: "ol", level: [2, 3, 4, 5]}

### 范数定义
    把向量变成一个标量
    P: 整数1,2,3...正无穷都可以
    常用:1范数与2范数
#### 范数理解
    L1:
    距离本身加和
    曼哈顿距离:红色、蓝色、黄色、所走的距离相同
    L2:
    绿色线的距离 向量的长度 平方加和后,开根号
![向量](imgs/03.png)
![向量](imgs/04.png)

#### 示例
##### L1
```python
import numpy as np
W = np.array([-3, 5, 6, -7, 2, 1])
my_abs = np.abs(W)
L1 = np.sum(my_abs)
L1
```
::: details result
24
:::
##### L2
```python
import numpy as np
W = np.array([-3, 5, 6, -7, 2, 1])
my_squ = np.square(W)
L2 = np.sqrt(np.sum(my_squ))
L2
```
::: details result
11.135528725660043
:::


### 特殊向量
#### 0向量
    分量全为0的向量
    例如:[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

#### 单位向量
    L2范数|模|长度为1的向量
    代表的是一个方向
    例如:[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
```python
import numpy as np
W = np.array([3, 4])
L2 = np.sqrt(np.sum(np.square(W)))
print(L2)
# 5.0

e = W/L2
print(e)
# 单位向量
# [0.6 0.8]

unit = np.sqrt(np.sum(np.square(e)))
print(unit)
# 模/长度
# 1.0
```

#### 稀疏向量
    大部分为0,小部分有值

#### 稠密向量
    大部分有值,小部分为0

#### 独热编码
    只有一个为1,其他为0
# 03.矩阵

[toc]{type: "ol", level: [2, 3, 4, 5]}

### 矩阵定义
::: tip
矩阵就是二维数组 m行n列
每个元素都有行标i和列标j a~ij~
:::


### 特殊矩阵
#### 方阵
::: tip
m=n
:::
    
#### 对称矩阵
::: tip
a~ij~ = a~ji~
沿主对角线对称 对阵矩阵必然是方阵
主对角线 a~11~ --> a~mn~
:::

#### 单位矩阵
    主对角线是1,其他位置是0
```python
# 创建单位矩阵
import numpy as np
# np.eye(6)
np.identity(6)
```
![矩阵](imgs/05.png)

#### 对角矩阵
    主对角线非0,其他位置为0
# 04.矩阵计算

[toc]{type: "ol", level: [2, 3, 4, 5]}

### 创建
```python
import numpy as np
a = np.arange(1, 13).reshape(3, 4)
b = np.arange(1, 13).reshape(3, 4)
```

### 基本运算
#### 加法
```python
a + b
```
![矩阵](imgs/06.png)

#### 减法
```python
a - b
```
![矩阵](imgs/07.png)

#### 数乘
```python
4 * a
```
![矩阵](imgs/08.png)

#### 乘法
```python
a * b
```
![矩阵](imgs/09.png)

#### 除法
```python
a / b
```
![矩阵](imgs/10.png)


### 转置
#### T
```python
a.T
```
![矩阵](imgs/11.png)
```python
# 非转置 要注意
a.reshape(4, 3)
```
![矩阵](imgs/12.png)

#### transpose
##### 转置二维数组
```python
a.transpose(1, 0)
```
![矩阵](imgs/11.png)
##### 转置多维数组
```python
m = np.arange(1,25)
n = m.reshape(2, 2, 6)
n
```
![矩阵](imgs/13.png)
```python
# 这里的012指的是对应位置的值2,2,6
n.transpose(1, 2, 0)
```
![矩阵](imgs/14.png)


### 内积
#### 基本概念
    把第一个矩阵的每行和第二个矩阵的每列,进行计算

#### 计算内积
```python
import numpy as np
a = np.arange(1, 9).reshape(2, 4)
b = np.arange(1, 9).reshape(4, 2)
a
b
# m行n列 n行k列 --> m行k列
```
![矩阵](imgs/15.png)
```python
np.dot(a, b)
```
![矩阵](imgs/16.png)
![矩阵](imgs/21.png)

#### 满足的规律
add   | 规律
:-----|:---------------
全部   | A + B + C = A + (B + C)


mult        | 规律
:-----------|:---------------
结合律       | (A * B) * C = A * (B * C)
左分配律     | (A + B) * C = AC + BC
右分配律     | A * (B + C) = AB + AC
- 不满足交换律:AB **≠**{style="color:brown"} BA
- 其他:**(AB)^T^ = B^T^A^T^**{style="color:goldenrod"}


### 逆矩阵
    矩阵没有A/B的说法,只有逆矩阵
    定义:
        假设方阵A乘以矩阵B等于单位矩阵1(方阵)
            AB = 1  B为A的右逆矩阵
            BA = 1  B为A的左逆矩阵
        * 如果B存在 则其左逆和右逆一定相等
#### 相关公式
- **(AB)^-1^ = B^-1^A^-1^**{style="color:goldenrod"}
- **(A^-1^)^-1^ = A**{style="color:green"}
- **(A^T^)^-1^ = (A^-1^)^T^**{style="color:brown"}

#### 求逆矩阵
```python
c = np.dot(a, b)
c_inv = np.linalg.inv(c)
c_inv
numpy.dot(c, c_inv)
```
![矩阵](imgs/16.png)
![矩阵](imgs/17.png)
![矩阵](imgs/22.png)

### 行列式
> 机器学习中使用较少
#### 行列式定义
    将矩阵变为一个标量
    必须是方阵,才能计算行列式

#### 计算方法
![矩阵](imgs/18.png)

#### 性质
##### 计算方式
![矩阵](imgs/19.png)
> n为对角线数据的个数
##### 推导过程
![矩阵](imgs/20.png)
##### 示例
```python
import numpy as np
A = np.arange(4).reshape(2, 2)
# 求行列式
res1 = np.linalg.det(np.linalg.inv(A))
res1
res2 = 1 / np.linalg.det(A)
res2
```
::: details result
-0.49999999999999994
-0.5
:::

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值