矩阵
- 向量是对数的拓展,一个向量表示一组数
- 矩阵是对向量的拓展,一个矩阵表示一组向量
- ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ) \begin{pmatrix} 1 & 2& 3 &4 \\ 5 & 6 & 7 & 8\\ 9& 10 & 11 &12 \\ 13 & 14 & 15&16\end{pmatrix} 15913261014371115481216
- 下面就有一个问题了,比如说上面这个矩阵,它到底表示怎么样的一组向量呢?这组向量里一共有几个向量?每个向量分别是谁呢?实际上对于这个问题,由于我们看待一个矩阵的视角不一样, 或者我们应用矩阵的这个应用场景情景不一样,我们通常会有不同的看待方式,不过整体如果非常宽泛的回答这个问题,也非常的容易。简而言之,我们有两个视角来看待这样的一个矩阵,一个视角就是我们一行一行的来看待这个矩阵,这样这个矩阵是由四个行向量组成的,另外一种视角, 那么就是所谓的列向量的视角。在这种情况下,这个矩阵,它依然包含四个向量
大多数情况下列向量比行向量更有用
或者我们应用矩阵的这个应用场景。情景不一样,我们通常呢,可能会有不同的看待方式,不过整体如果非常宽泛的回答这个问题,也非常的容易。简而言之,我们有两个视角来看待这样的一个矩阵,一个视角就是我们。一行一行的来看待这个矩阵,这样这个矩阵是由四个行向量组成的。
我们后面将会不停的和各种不同的矩阵打交道,抽象的来讲,这里我们学习的是代数,代数就是用字母代表数。在通常的数学符号体系中,我们使用大写的字母A来代表一个矩阵,那么对于这个矩阵,其中的每一个元素通常用和这个大写字母相对应的小写字母来表示,用这个小写字母的下标来表示这个元素所对应的行数和列数。举个例子:
A
=
[
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
]
A=\begin{bmatrix}a_{11} & a_{12} & a_{13} \\a_{21} & a_{22} & a_{23} \\a_{31} & a_{32} & a_{33} \\\end{bmatrix}
A=
a11a21a31a12a22a32a13a23a33
我们在线性代数中表示一个矩阵和我们在计算机的世界中表示一个二维数组是一样的。
打个比方,我们什么时候可以用到矩阵呢?大家在平时的学习生活工作中一定见过各种各样不同的表格,实际上这样的一个数据表格就是一个矩阵,比如说在这里我写上了一个3×5的矩阵,
那么这个矩阵中每一个元素都表示一个成绩,而整个矩阵就表示的是一个班级中若干个同学不同的科目的成绩。在这里,大家可以看到这个矩阵,它可能表示张三,李四,王五这三个人的成绩,这就是每一行的意思。同时,它表示了这三个人在语文,数学,英语,物理,化学这五个不同科目上的成绩。这就是每一列的含义。
那么,在这样的情况下,大家就可以很自然的想到对于这个矩阵,每一个行向量实际上就表示的是某一个人各个科目的成绩,这是我们从行向量的视角来看待这个矩阵,而每一个列向量就表示的是某一个科目不同的人的成绩,这就是我们从列向量的视角去看待这个矩阵。那么很显然,我们可以在行向量相应的这个维度上做一些事情,比如说计算每一个同学考试的总成绩,我们只需要把这一行一行的成绩进行加和就好了。
当然我们也可以在列向量上做一些事情,比如说计算这一个班级的同学中,每一个科目的平均分, 在这种情况下我们就需要一列一列的处理这些数据。对于每一列的数据都求一下和再除以行数,也就是除以这个班级的总人数。那么当然了,在这里我举的这个例子是非常直观简单的一个例子,其实也是在大多数我们在数据科学中显示的来使用矩阵的例子,那么在大多数数据科学的任务中,我们拿到的数据本身通常就是这样的一个矩阵,我们基于这样的一个矩阵进行数据处理,不过在线性代数的世界中,对于一个矩阵,它除了可以这样显式地表示一组数据之外,还可以表示更加抽象的内容,比如说它可以表示是一组变换或者是一个空间。个人认为,用矩阵表示这些内容可能是我们线性代数更加关注的内容。
矩阵及其运算
[ 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。
函数签名:
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)
。
示例:文章来源地址https://www.toymoban.com/news/detail-621211.html
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
参数指定其他数据类型。
-
示例:
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
方法用于计算两个数组的矩阵乘法(点积)。在矩阵运算中,矩阵乘法是一种常见的操作,它涉及到两个矩阵的元素相乘和求和的过程。
函数签名:
numpy.dot(a, b, out=None)
参数:
-
a
:要进行矩阵乘法的数组或矩阵。 -
b
:要进行矩阵乘法的数组或矩阵。 -
out
:可选参数,指定输出结果的数组。如果不指定,结果将会创建一个新的数组。
返回值:
- 返回两个数组的矩阵乘法结果。
注意事项:文章来源:https://www.toymoban.com/news/detail-621211.html
- 两个数组的维度必须满足矩阵乘法的条件,即第一个数组的列数要与第二个数组的行数相等。
- 如果两个数组是一维的,那么
dot
函数将计算它们的点积(内积)。 - 如果两个数组是二维的,那么
dot
函数将计算它们的矩阵乘法。
示例:
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]]
到了这里,关于11-矩阵(matrix)_方阵_对称阵_单位阵_对角阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!