矩阵及其运算
[ a 11 ⋯ a 1 n ⋯ ⋯ ⋯ a m 1 ⋯ a m n ] \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \cdots & \cdots & \cdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} a11⋯am1⋯⋯⋯a1n⋯amn
矩阵就是二维数组,上面是一个 m 乘 n 的矩阵,它有 m 行,n 列,每行每列上面都有一个 元素,每个元素都有行标 i 和列标 j, 对应的元素就是
a i j a_{ij} aij
矩阵是一种常见的数据结构,它由一堆一维数组(也称为行向量)组成。矩阵是二维数组,由行和列构成。通常用于在数学、计算机科学、统计学等领域进行数据处理和表示。
矩阵可以由一堆行向量组成,这种表示方式称为行向量组成的矩阵;也可以由一堆列向量组成,称为列向量组成的矩阵。矩阵的行数表示矩阵的高度,列数表示矩阵的宽度。行向量组成的矩阵是以横向排列的行向量构成,而列向量组成的矩阵是以纵向排列的列向量构成。
例如,下面是一个由行向量组成的矩阵:
[1 2 3]
[4 5 6]
[7 8 9]
下面是一个由列向量组成的矩阵:
[1 4 7]
[2 5 8]
[3 6 9]
矩阵在线性代数、图像处理、神经网络等领域具有广泛的应用。在计算机中,矩阵也是很多数据处理算法的基础,例如矩阵乘法、矩阵转置等操作。
方阵,对称矩阵,单位矩阵,对角线
方阵
下面介绍几种特殊的矩阵,如果 m 等于 n,那就称为方阵
[ 1 0 0 0 2 0 0 0 3 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 3 \\ \end{bmatrix} 100020003
对称矩阵
对称矩阵转置后不会改变原始矩阵的形状和值。
定义是 a i j a_{ij} aij
等于 a j i a_{ji} aji那么就是对称矩阵(沿着主对角线(左上角到右下角划分的线)的元素对称, 这里的对称是主对角线两侧的元素相等),并且肯定是个方阵
[ 1 1 2 1 2 3 2 3 3 ] \begin{bmatrix} 1 & 1 & 2 \\ 1 & 2 & 3 \\ 2 & 3 & 3 \\ \end{bmatrix} 112123233
单位矩阵
主对角线都是 1,其它位置是 0,这称之为单位阵,单位矩阵写为 I,一定是方阵,等同于数字里面的 1
[ 1 ⋯ 0 0 0 ⋯ 1 ⋯ 0 0 0 ⋯ ⋯ ⋯ 0 0 0 ⋯ ⋯ ⋯ 0 0 0 ⋯ 1 ] \begin{bmatrix} 1 & \cdots & 0 & 0 & 0\\ \cdots & 1 & \cdots & 0 & 0\\ 0 & \cdots & \cdots & \cdots & 0\\ 0 & 0 & \cdots & \cdots & \cdots\\ 0 & 0 & 0 & \cdots & 1\\ \end{bmatrix} 1⋯000⋯1⋯000⋯⋯⋯000⋯⋯⋯000⋯1
单位矩阵对应的方法是numpy模块中的identity和eye方法, numpy.identity
返回一个单位矩阵,即一个对角线上为1,其他位置为0的方阵。
identity方法
参数:
n
:一个整数,表示输出的单位矩阵的行数和列数。dtype
:一个可选参数,用于指定输出数组的数据类型,默认为float
类型。
返回值:
out
:一个大小为n x n
的NumPy数组,其主对角线为1,其余元素为0。
eye方法
numpy.eye
方法用于创建一个单位矩阵,也称为单位矩阵或恒等矩阵。单位矩阵是一个方阵,它的主对角线上的元素都是1,其余元素都是0。
函数签名:
python
numpy.eye(N, M=None, k=0, dtype=float, order='C')
参数:
N
:生成矩阵的行数(也是列数,因为是方阵)。M
:可选参数,生成矩阵的列数,默认为N
,因为是方阵,一般不需要指定。k
:可选参数,对角线的偏移量,默认为0,表示主对角线上的元素为1,其他元素为0;若k
为正整数,则主对角线在矩阵的上方,若为负整数,则主对角线在矩阵的下方,对角线元素为1。dtype
:可选参数,指定生成矩阵的数据类型,默认为float
。order
:可选参数,指定数组的内存布局,'C'
表示C顺序,'F'
表示Fortran顺序,默认为'C'
。
返回值:
- 返回一个单位矩阵,其形状为
(N, M)
。
示例:
python
import numpy as np
# 创建一个3x3的单位矩阵
eye_matrix = np.eye(3)
print(eye_matrix)
# 输出:
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
# 创建一个4x4的单位矩阵,主对角线偏移量为1
eye_matrix_shifted = np.eye(4, k=1)
print(eye_matrix_shifted)
# 输出:
# [[0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]
# [0. 0. 0. 0.]]
numpy.eye
函数非常有用,特别在线性代数和矩阵运算中经常用到。
identity和eye方法的区别
numpy.eye
函数与numpy.identity
函数都用于创建单位矩阵,但它们有一些区别:
-
参数不同:
numpy.eye(N, M=None, k=0, dtype=float)
:eye
函数可以创建任意大小的单位矩阵,其中N
表示行数,M
表示列数,默认情况下M
等于N
,k
表示对角线的偏移量,默认为0,即主对角线。numpy.identity(n, dtype=None)
:identity
函数创建的是一个方阵(行数等于列数),只需要一个整数n
作为参数,表示输出单位矩阵的行数和列数。
-
默认值不同:
numpy.eye
的默认数据类型为float
,可以通过dtype
参数指定其他数据类型。numpy.identity
的默认数据类型也是float
,可以通过dtype
参数指定其他数据类型。
示例:
python
import numpy as np
# 使用eye创建3x4的单位矩阵,对角线偏移量为1
eye_matrix = np.eye(3, 4, k=1, dtype=int)
print(eye_matrix)
# 输出:
# [[0 1 0 0]
# [0 0 1 0]
# [0 0 0 1]]
# 使用identity创建3x3的单位矩阵,默认数据类型为float
identity_matrix = np.identity(3, dtype=int)
print(identity_matrix)
# 输出:
# [[1 0 0]
# [0 1 0]
# [0 0 1]]
总的来说,eye
函数比identity
函数更灵活,可以创建非方阵的单位矩阵,并且可以指定对角线的偏移量,而identity
函数则专门用于创建方阵的单位矩阵。
对角阵
对角阵,就是主对角线非 0,其它位置是 0
dot方法在矩阵中的应用
numpy.dot
方法用于计算两个数组的矩阵乘法(点积)。在矩阵运算中,矩阵乘法是一种常见的操作,它涉及到两个矩阵的元素相乘和求和的过程。
函数签名:
python
numpy.dot(a, b, out=None)
参数:
a
:要进行矩阵乘法的数组或矩阵。b
:要进行矩阵乘法的数组或矩阵。out
:可选参数,指定输出结果的数组。如果不指定,结果将会创建一个新的数组。
返回值:
- 返回两个数组的矩阵乘法结果。
注意事项:
- 两个数组的维度必须满足矩阵乘法的条件,即第一个数组的列数要与第二个数组的行数相等。
- 如果两个数组是一维的,那么
dot
函数将计算它们的点积(内积)。 - 如果两个数组是二维的,那么
dot
函数将计算它们的矩阵乘法。
示例:
python
import numpy as np
# 一维数组的点积(内积)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
dot_product = np.dot(a, b)
print(dot_product) # 输出:32
# 二维数组的矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
matrix_product = np.dot(matrix_a, matrix_b)
print(matrix_product)
# 输出:
# [[19 22]
# [43 50]]