- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境配置
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 数组的创建和操作
- NumPy - 数组创建函数
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 数组迭代
- NumPy - 数组重塑
- NumPy - 数组拼接
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组展平
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引与切片
- NumPy - 高级索引
- NumPy 数组属性和操作
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步长
- NumPy - 数组元素大小
- NumPy - 广播机制
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组操作
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 复制与视图
- NumPy - 元素级数组比较
- NumPy - 数组过滤
- NumPy - 数组连接
- NumPy - 排序、搜索与计数函数
- NumPy - 数组搜索
- NumPy - 数组并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 加载数组
- Numpy - 保存数组
- NumPy - 向数组追加值
- NumPy - 交换数组列
- NumPy - 向数组插入轴
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 填充缺失数据
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位数
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 矩阵库
NumPy 矩阵库
NumPy 矩阵库提供创建和操作矩阵的函数。此库允许您执行各种矩阵运算,包括矩阵乘法、求逆和分解。
在 NumPy 中,可以使用 numpy.matrix() 函数或通过将现有数组转换为矩阵来创建矩阵。本教程将介绍创建矩阵的不同方法。
使用 numpy.matrix() 函数
numpy.matrix() 函数用于从字符串表示或现有数据结构创建矩阵。此函数最适合快速创建小型矩阵。
示例
在下面的示例中,我们从字符串表示和现有数组创建矩阵。np.matrix() 函数将字符串解释为 2x2 矩阵,数组直接转换为矩阵格式:
import numpy as np # Creating a matrix from a string matrix_str = np.matrix('1 2; 3 4') print("Matrix from string:\n", matrix_str) # Creating a matrix from an array array_data = np.array([[1, 2], [3, 4]]) matrix_from_array = np.matrix(array_data) print("Matrix from array:\n", matrix_from_array)
以下是获得的输出:
Matrix from string: [[1 2] [3 4]] Matrix from array: [[1 2] [3 4]]
使用 numpy.array() 函数
您可以使用 numpy.asmatrix() 函数将 NumPy 数组转换为矩阵。当您拥有以数组形式存在的现有数据并希望对其执行矩阵运算时,这非常有用。
示例
在下面的示例中,我们创建一个数组,然后使用 np.asmatrix() 函数将其转换为矩阵:
import numpy as np # Creating an array array_data = np.array([[5, 6], [7, 8]]) # Converting array to matrix matrix_data = np.asmatrix(array_data) print("Converted Matrix:\n", matrix_data)
这将产生以下结果:
Converted Matrix: [[5 6] [7 8]]
NumPy 中的矩阵运算
创建矩阵后,您可以执行各种矩阵运算,例如加法、乘法、转置、求逆等等。
矩阵加法
添加两个矩阵包括添加对应的元素。如果两个矩阵具有相同的形状,则可以逐元素地将它们相加。
示例
在此示例中,“matrix_1”和“matrix_2”逐元素相加,这意味着“matrix_1”的每个元素都加到“matrix_2”中对应的元素:
import numpy as np # Add two matrices matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) result = matrix_1 + matrix_2 print(result)
以下是上述代码的输出:
[[ 6 8] [10 12]]
矩阵乘法
我们可以使用以下方法执行矩阵乘法:
- 使用 * 运算符
- 使用 @ 运算符 (Python 3.5+)
- 使用 np.dot() 函数
- 使用 numpy.matmul() 函数
与逐元素乘法不同,矩阵乘法遵循线性代数规则。
示例
在此示例中,我们使用以上所有方法乘以两个矩阵:
import numpy as np matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # Matrix multiplication using * matrix_product1 = matrix_1 * matrix_2 print("Matrix Multiplication (*):\n", matrix_product1) # Matrix multiplication using @ matrix_product2 = matrix_1 @ matrix_2 print("Matrix Multiplication (@):\n", matrix_product2) # Matrix multiplication using np.dot() matrix_product3 = np.dot(matrix_1, matrix_2) print("Matrix Multiplication (np.dot()):\n", matrix_product3) # Matrix multiplication using np.matmul() matrix_product4 = np.matmul(matrix_1, matrix_2) print("Matrix Multiplication (np.matmul()):\n", matrix_product4)
获得的输出如下所示:
Matrix Multiplication (*): [[ 5 12] [21 32]] Matrix Multiplication (@): [[19 22] [43 50]] Matrix Multiplication (np.dot()): [[19 22] [43 50]] Matrix Multiplication (np.matmul()): [[19 22] [43 50]]
矩阵求逆
矩阵求逆是一个寻找矩阵的操作,当它与原始矩阵相乘时,会产生单位矩阵。可以使用 np.linalg.inv() 函数计算矩阵的逆。
但是,并非所有矩阵都是可逆的。矩阵必须是方阵并且具有非零行列式才能可逆。
示例
在下面的示例中,我们使用 np.linalg.inv() 函数反转一个 2x2 矩阵。输出是一个新矩阵,当它与原始矩阵相乘时,结果是单位矩阵:
import numpy as np matrix = np.array([[1, 2], [3, 4]]) inverse_matrix = np.linalg.inv(matrix) print(inverse_matrix)
执行上述代码后,我们得到以下输出:
[[-2. 1. ] [ 1.5 -0.5]]
矩阵转置
矩阵转置包括将其翻转到其对角线,交换行和列索引。我们可以使用 .T 属性在 NumPy 中转置矩阵。
示例
在下面的示例中,我们使用“.T”属性转置一个 2x2 矩阵:
import numpy as np # Transpose of a matrix matrix = np.array([[1, 2], [3, 4]]) transposed = matrix.T print(transposed)
产生的结果如下:
[[1 3] [2 4]]
矩阵行列式
矩阵的行列式是一个标量值,可以使用 np.linalg.det() 函数计算。它提供有关矩阵属性的信息,例如它是否可逆。
非零行列式表示矩阵可逆,而行列式为零表示矩阵是奇异的。
示例
在此示例中,np.linalg.det() 函数计算给定矩阵的行列式:
import numpy as np # Compute the determinant matrix = np.array([[1, 2], [3, 4]]) det = np.linalg.det(matrix) print("Determinant:", det)
我们得到如下所示的输出:
Determinant: -2.0000000000000004
特征值和特征向量
numpy.linalg.eig() 函数用于计算方阵的特征值和右特征向量。特征值表示向量的幅度,而特征向量提供方向。
特征值和特征向量是线性代数中的基本概念,在许多领域都很重要,例如主成分分析 (PCA) 和求解微分方程。
示例
在此示例中,np.linalg.eig() 函数计算矩阵的特征值和特征向量。特征值表示沿每个特征向量方向缩放的幅度:
import numpy as np # Compute eigenvalues and eigenvectors matrix = np.array([[4, -2], [1, 1]]) eigvals, eigvecs = np.linalg.eig(matrix) print("Eigenvalues:", eigvals) print("Eigenvectors:", eigvecs)
以下是获得的输出:
Eigenvalues: [3. 2.] Eigenvectors: [[0.89442719 0.70710678] [0.4472136 0.70710678]]
奇异值分解 (SVD)
SVD 是一种矩阵分解方法,它将方阵的特征分解推广到任何 m x n 矩阵。我们可以在 NumPy 中使用 numpy.linalg.svd() 函数实现这一点。
特征分解是将矩阵分解为其特征值和特征向量的过程。这些特征值表示缩放因子,而特征向量显示矩阵拉伸或压缩的方向。
示例
在下面的示例中,我们使用 np.linalg.svd() 函数对“2x2”矩阵执行奇异值分解。结果包括 U 矩阵、奇异值和 V 矩阵,它们共同表示原始矩阵:
import numpy as np matrix_a = np.matrix('1 2; 3 4') # Performing SVD U, S, V = np.linalg.svd(matrix_a) print("U Matrix:\n", U) print("Singular Values:\n", S) print("V Matrix:\n", V)
这将产生以下结果:
U Matrix: [[-0.40455358 -0.9145143 ] [-0.9145143 0.40455358]] Singular Values: [5.4649857 0.36596619] V Matrix: [[-0.57604844 -0.81741556] [ 0.81741556 -0.57604844]]