摘要 

本周跟着吴恩达老师的机器学习系列课程复习了线性代数中的矩阵及其基本运算,包括加减、乘法与转置等,并用代码进行了实现。

Abstract

This week, I reviewed the matrices and their basic operations in linear algebra, including addition, subtraction, multiplication, and transpose, following Professor Andrew Ng's machine learning course and implemented by coding.

1 矩阵

1.1 定义

矩阵是指由数字组成的矩形阵列,写在方括号内,通常由大写字母表示。

矩阵维度指的是矩阵中行与列的数量,通常由“行数\times列数”的形式表示。

假设A是一个m\timesn的矩阵,那么A通常包括m行n列: 

1.2 向量

向量是一种特殊的矩阵,它的列数为1,即m\times1的矩阵,也称为m维向量,通常用小写字母表示。

假设y是一个四维向量,即包括4行1列:

2 基本运算及代码实现

2.1 矩阵加减

两个相同维度的矩阵可以逐元素相加或相减。

例子:

若:

则:

 代码实现:

# 定义两个矩阵
A = np.array([[1, 0],
              [2, 5],
              [3, 2]])

B = np.array([[4, 1],
              [2, 5],
              [0, 1]])

print("矩阵 A:")
print(A)
print("\n矩阵 B:")
print(B)

#矩阵加法
add = A + B
print("\n1. 矩阵加法 (A + B):")
print(add)

#矩阵减法
sub = A - B
print("\n2. 矩阵减法 (A - B):")
print(sub)

结果如下:

2.2 矩阵乘法

2.2.1 标量乘法

标量是一个只有大小(数值)而没有方向的量。与向量和矩阵不同,标量不具有任何维度信息,它仅仅代表一个单独的数值。

一个矩阵与一个标量相乘时,每个元素都乘以该标量。

例子:假设标量大小为3

代码实现:

#标量与矩阵相乘
element = 3
result1 = element * A
print("\n3. 标量与矩阵相乘 (3*A):")
print(result1)

结果如下:

2.2.2 矩阵与向量相乘

一个m\timesn的矩阵可以与一个n维向量相乘,即矩阵的列数必须等于向量的行数,最终得到一个m维向量。

例子:

若向量:

则:

代码实现:

#向量
y = np.array([[2],
              [1]])
print("向量 y:")
print(y)

#矩阵与向量相乘
result2 = np.dot(A, y)
print("\n4. 矩阵与向量相乘 (A · y):")
print(result2)

结果如下:

2.2.3 矩阵相乘

同理,矩阵与矩阵相乘时,前一矩阵的列数必须与后一矩阵的行数相等,最终得到一个m\timesn的矩阵(其中m为第一个矩阵的行数,n为后一矩阵的列数)。

例子:

若:

则:

代码实现:

C = np.array([[2, 0],
              [1, 1]])
print("矩阵 C:")
print(C)

#矩阵与矩阵相乘
result3 = np.dot(A, C)
print("\n4. 矩阵与矩阵相乘 (A · C):")
print(result3)

结果如下:

 

矩阵相乘可以打包大量运算。在线性回归中,可以同时计算多组参数,不需要使用迭代算法一步步计算。 

2.2.4 矩阵乘法特征

矩阵乘法不满足交换律,因为交换律,交换两矩阵顺序,可能导致原本匹配的维度变得不匹配。如上一小节,若将AC的顺序进行交换,则无法得到结果,因为C的列数不等于A的行数。

在维度匹配的前提下,矩阵乘法满足结合律,即\left ( AB \right )C = A(BC)

同样,在维度匹配的前提下,矩阵乘法满足分配律,即\left ( A+B \right )C = AB + AC

2.3 单位矩阵

单位矩阵是一个方阵(行数等于列数),其主对角线上的元素都是 1,其余元素都是 0。

通常用符号I\l表示,有时也写作I_{n},表示它是 n\timesn的单位矩阵。

代码实现:(生成一个三阶单位矩阵)

n = 3
I = np.eye(n)

print("\n6.单位矩阵:")
print(I)

结果如下:

 

2.4 逆矩阵

若存在矩阵 A^{-1},使得 AA^{-1} = A^{-1}A = I,则称 A 是可逆的。

只有为方阵时才可能存在逆矩阵。若A是一个有逆矩阵的方阵,则称其为非奇异矩阵。与之对应,没有逆矩阵的矩阵被称为奇异矩阵或者退化矩阵。

逆矩阵常用于求解线性方程组。

例子:

代码实现:

#逆矩阵(要求矩阵必须是方阵且非奇异)
try:
    inv_C = np.linalg.inv(C)
    print("\n6. 矩阵 C 的逆矩阵:")
    print(inv_C)
except np.linalg.LinAlgError:
    print("\n6. 矩阵 C 是奇异矩阵,不可逆!")

结果如下:

2.5 矩阵的转置

矩阵A的转置记作A^{T} ,其定义为将原矩阵的行变为列,列变为行。

例子:

代码实现:

#矩阵转置
transpose = A.T
print("\n7. 矩阵 A 的转置:")
print(transpose)

结果如下:

3 总结

本周跟着吴恩达老师的机器学习系列课程回顾了矩阵的定义及基本运算,并进行了代码实现,对上周单变量线性回归的过程有了更深刻的理解。 

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐