Python与机器学习系列|1.Python中的向量、 矩阵和数组(二)

Roger 不言 劝人学医TDLP 2023-09-15 16:55
Machine learning is changing the world!
图片

图源于网络

1

1.11 展开一个矩阵

在Numpy中可以使用flatten将矩阵转换成一个一维数组。 此外,也可以使用
reshape来创建一个行向量。

# 加载库import numpy as np# 建立矩阵matrix = np.array([[1, 2, 3],                   [4, 5, 6],                   [7, 8, 9]])# 展开矩阵matrix.flatten()# array([1, 2, 3, 4, 5, 6, 7, 8, 9])matrix.reshape(1, -1)

1

1.12 计算矩阵的秩

矩阵的秩(Rank)是一个重要的线性代数概念,它用于衡量矩阵中的线性独立性。矩阵的秩就是由它的列或行展开的向量空间的维数。我们可以使用NumPy中的线性代数方法matrix_rank计算矩阵的秩。

# Create matrixmatrix = np.array([[1, 1, 1],                   [1, 1, 10],                   [1, 1, 15]])#返回矩阵的秩np.linalg.matrix_rank(matrix)# 2

1

1.13 计算行列式

矩阵的行列式(Determinant)是一个标量值,它与方阵(即行数等于列数的矩阵)相关联。行列式的计算通常用于线性代数中,具有许多重要的数学和工程应用。行列式用于描述矩阵的性质,如矩阵是否可逆、矩阵的秩、线性方程组的解等。对于一个n × n的方阵A,它的行列式通常表示为det(A)或|A|。

# Create matrixmatrix = np.array([[1, 2, 3],                  [2, 4, 6],                  [3, 8, 9]])# Return determinant of matrixnp.linalg.det(matrix)# 0.0

1

1.14 获取矩阵的对角线元素

矩阵的对角线元素是指矩阵中位于从左上角到右下角的主对角线上的元素。主对角线是指行数和列数相等的情况下,矩阵的第1行、第1列、第2行、第2列等相交的位置上的元素。对角线元素通常表示为 `a[i][i]`,其中 `i` 是行索引和列索引相等的位置。对角线元素在矩阵理论和线性代数中具有重要的作用,它们有以下用途:

  • 矩阵的迹(Trace):矩阵的迹是对角线元素的和,通常表示为 `Tr(A)`,其中 `A` 是矩阵。迹在计算中常用于一些数学证明和运算中,具有特殊的性质。
  • 矩阵的特征值(Eigenvalues):矩阵的特征值是矩阵线性变换中非常重要的概念,它们通过求解矩阵的特征方程获得。对角线元素对特征值的计算和性质具有影响。
  • 矩阵的行列式(Determinant):行列式是矩阵的一个标量值,对角线元素的乘积减去反对角线元素的乘积用于计算二维矩阵的行列式,而三维及更高维的矩阵行列式的计算也涉及到对角线元素。
  • 矩阵的正定性:对角线元素在判断矩阵的正定性、半正定性、负定性等性质时起到关键作用。正定矩阵的对角线元素必须为正数。
  • 对称矩阵:对角线元素通常在对称矩阵中具有特殊性质,因为对称矩阵的非对角线元素与其对应的对角线元素是相等的。
  • 矩阵的压缩表示:对于稀疏矩阵,对角线元素通常具有特殊的存储方式,因为它们是矩阵中较为密集的部分。

使用NumPy的diagonal很容易获取矩阵的对角线元素。 我们还可以使用ffset参数在主对角线的上下偏移, 获取偏移后的对角线方向的元素:

# Create matrixmatrix = np.array([[1, 2, 3],                   [2, 4, 6],                   [3, 8, 9]])#返回对角线元素matrix.diagonal()# array([1, 4, 9])# 返回主对角线上偏移量为1的对角线元素matrix.diagonal(offset=1)# array([2, 6])# 返回主对角线下方偏移量为1的对角线元素matrix.diagonal(offset=-1)# array([2, 8])

1

1.15 计算矩阵的迹

矩阵的迹是其对角线元素之和, 常被用在机器学习方法的底层计算中。给定一个NumPy的多维数组, 使用trace就能计算出它的迹。 我们还可以通过先返回矩阵的对角线元素再对其求和的方式来计算矩阵的迹。

# Create matrixmatrix = np.array([[1, 2, 3],                   [2, 4, 6],                   [3, 8, 9]])# 返回迹(对角线之和)matrix.trace()# 14# 返回对角线元素之和sum(matrix.diagonal())

1

1.16 计算特征值和特征向量

矩阵的特征值(Eigenvalue)和特征向量(Eigenvector)是线性代数中的重要概念

对于一个方阵(即行数等于列数的矩阵)A,其特征值是一个标量 λ,它满足以下方程:A * v = λ * v,这里,A是一个方阵,v是一个非零向量,λ是特征值。特征值告诉我们在矩阵A的作用下,向量v只发生了缩放,而没有改变方向。特征值可以是实数或复数。特征向量是与特征值相关联的向量。对于方阵A和对应的特征值λ,特征向量v是一个非零向量,它满足上述方程。特征向量描述了在矩阵作用下,向量v的方向不变,只发生了缩放。

特征值和特征向量在多个领域中有广泛的应用,包括:主成分分析(PCA)—特征值和特征向量用于降维数据集,以便在保留数据的主要变化方向的同时减少维度、机器学习—在机器学习中,特征值和特征向量可用于降维、特征选择和数据变换等任务等方面。
使用NumPy的linalg.eig 能计算出任何方阵的特征值和特征向量。
# Create matrixmatrix = np.array([[1, -1, 3],                   [1, 1, 6],                   [3, 8, 9]])#计算特征值和特征向量eigenvalues, eigenvectors = np.linalg.eig(matrix)# 查看特征值eigenvalues# array([ 13.55075847, 0.74003145, -3.29078992])# 查看特征向量eigenvectors# array([[-2.52429940e-01, -9.48683298e-01, -3.38042383e-01],#        [-5.04859881e-01, -4.50923270e-17, -6.76084766e-01],#        [-8.25466914e-01,  3.16227766e-01,  6.54703549e-01]])

1

1.17 计算点积

矩阵的点积,也称为矩阵乘法或矩阵内积,是一种矩阵运算,用于将两个矩阵相乘,产生一个新的矩阵。矩阵点积的用处非常广泛,特别是在线性代数、统计学、机器学习和工程领域中。
点积的定义如下:假设有两个矩阵A和B,如果A的列数等于B的行数,则可以计算它们的点积。点积的结果矩阵C的元素c_ij等于A的第i行与B的第j列对应元素的乘积之和。具体表达式如下:C = A × B,其中,C是结果矩阵,A和B是要相乘的矩阵。
点积的用处包括:
  • 线性代数:矩阵点积在线性代数中是一项基本操作。它可以用来解线性方程组、求解特征值和特征向量、计算矩阵的逆等。
  • 数据变换:在统计学和数据分析中,矩阵点积用于数据的变换和降维。例如,主成分分析(PCA)就是通过计算数据协方差矩阵的特征向量和特征值来实现的。
  • 神经网络:在神经网络和深度学习中,矩阵点积是神经网络层之间的主要运算。神经网络的前向传播和反向传播都依赖于矩阵点积来计算权重和激活值之间的关系。
  • 图像处理:在图像处理中,卷积操作通常涉及矩阵点积,用于图像滤波和特征提取。
  • 工程和物理学:矩阵点积在工程和物理学中用于描述复杂的物理系统,如电路分析、机械系统建模等。
可以使用NumPy的dot来计算点积, 或者在ython 3.5以上的版本中使用新操作符@计算点积。
# 建立两个向量vector_a = np.array([1,2,3])vector_b = np.array([4,5,6])# 计算点积np.dot(vector_a, vector_b)# 32

1

1.18 矩阵的相加或相减

使用NumPy的add和subtract函数可以实现矩阵的加减。

# 建立矩阵matrix_a = np.array([[1, 1, 1],                     [1, 1, 1],                     [1, 1, 2]])# 建立矩阵matrix_b = np.array([[1, 3, 1],                     [1, 3, 1],                     [1, 3, 8]])# 两个矩阵相加np.add(matrix_a, matrix_b)# array([[ 2,  4,  2],#        [ 2,  4,  2],#        [ 2,  4, 10]])# 两个矩阵相减np.subtract(matrix_a, matrix_b)# array([[ 0, -2,  0],#        [ 0, -2,  0],#        [ 0, -2, -6]])# 两个矩阵相加

当然,也可以直接使用+或-号

matrix_a + matrix_b

1

1.19 矩阵的乘法

使用NumPy的dot或者在Python 3.5以上的版本中使用“@”操作符可以实现矩阵的乘法。

# Create matrixmatrix_a = np.array([[1, 1],                     [1, 2]])# Create matrixmatrix_b = np.array([[1, 3],                     [1, 2]])# M两个矩阵相乘np.dot(matrix_a, matrix_b)# array([[2, 5],#        [3, 7]])
# 使用@实现两个矩阵相乘matrix_a @ matrix_b

如要要将两个矩阵对应的元素相乘,则需要使用*

# 两个矩阵对应的元素相乘matrix_a * matrix_b# array([[1, 3],#        [1, 4]])

1

1.20 计算矩阵的逆

矩阵的逆是矩阵的一种特殊性质,它通常用于解线性方程组和进行线性变换的逆操作。
对于一个方阵(即行数和列数相等的矩阵)A,如果存在另一个方阵B,使得它们的乘积为单位矩阵(记作I),即A乘以B等于I,那么矩阵B就被称为矩阵A的逆,通常表示为A的负一次方(A⁻¹),表示如下:A * A⁻¹ = A⁻¹ * A = I,其中,A表示原始矩阵,A⁻¹表示它的逆矩阵,I表示单位矩阵。
使用NumPy中的线性代数方法inv可以计算一个矩阵的逆。
# Create matrixmatrix = np.array([[1, 4],                   [2, 5]])# 计算矩阵的逆np.linalg.inv(matrix)# array([[-1.66666667, 1.33333333],#        [ 0.66666667, -0.33333333]])# 矩阵和矩阵的逆相乘matrix @ np.linalg.inv(matrix)# array([[ 1., 0.],#        [ 0., 1.]])

1

1.21 生成随机数

使用NumPy的random函数可以生成随机数。

# 设置随机种子np.random.seed(0)# 生成3个0-1之间的浮点数np.random.random(3)# array([0.5488135 , 0.71518937, 0.60276338])# 产生3个3-10之间的随机整数np.random.randint(0, 11, 3)# array([3, 7, 9])# 从均值是0且标准差是1的正态分布数据中随机抽取3个数np.random.normal(0.0, 1.0, 3)# array([-1.42232584,  1.52006949, -0.29139398])# 从均值为0且散布程度是1的逻辑分布中随机抽取3个数np.random.logistic(0.0, 1.0, 3)# array([-0.98118713, -0.08939902,  1.46416405])# 从大于或等于1且小于2的数中随机抽取3个数np.random.uniform(1.0, 2.0, 3)# array([ 1.47997717, 1.3927848 , 1.83607876])

本节完,下个章节我们将学习如何在Python中加载数据,包括csv文件、Excel文件、JSON文件等。

图片

图源于网络


往期推荐

图片

Python与机器学习系列|1.Python中的向量、 矩阵和数组(一)



参考来源:Chris AlbonMachine Learning with Python Cookbook-Practical Solutions from Preprocessing to Deep Learning

收录于合集 #机器学习
 52
上一篇机器学习文献|联合腺癌分级系统和血清蛋白质组学预测I期NSCLC复发风险
个人观点,仅供参考

微信扫一扫
关注该公众号