Numpy中的矩阵运算

简介: 通过本文的详细讲解,您已经掌握了NumPy中的矩阵运算,包括基础数组创建、基本运算、矩阵乘法、逆、行列式以及广播机制等。NumPy是进行科学计算的重要工具,灵活运用它将大大提升您的工作效率。

NumPy中的矩阵运算全面解析

NumPy是Python科学计算的基础包,它为支持大型、多维数组和矩阵运算提供了高效的工具和函数。本文将详细介绍NumPy中的矩阵运算,包括基本的数组创建、操作、矩阵运算以及高级功能,帮助您深入理解并高效利用NumPy进行科学计算。

=

一、NumPy基础

1.1 NumPy安装

首先,确保已安装NumPy。可以使用以下命令安装:

pip install numpy
​

1.2 导入NumPy

在使用NumPy之前,需先导入该库:

import numpy as np
​

二、NumPy数组的创建

NumPy中的基本数据结构是ndarray(n维数组)。可以通过多种方式创建数组。

2.1 从列表或元组创建数组

# 从列表创建一维数组
array_1d = np.array([1, 2, 3, 4, 5])
print(array_1d)

# 从嵌套列表创建二维数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(array_2d)
​

2.2 使用内置函数创建数组

NumPy提供了一些函数用于生成特定形状和内容的数组:

# 创建全零数组
zeros_array = np.zeros((2, 3))  # 2行3列
print(zeros_array)

# 创建全一数组
ones_array = np.ones((3, 2))  # 3行2列
print(ones_array)

# 创建特定值的数组
full_array = np.full((2, 2), 7)  # 2x2数组,所有值为7
print(full_array)

# 创建单位矩阵
identity_matrix = np.eye(3)  # 3x3单位矩阵
print(identity_matrix)

# 创建范围数组
range_array = np.arange(0, 10, 2)  # 从0到10(不包括10),步长为2
print(range_array)

# 创建等间隔数组
linspace_array = np.linspace(0, 1, 5)  # 在0到1之间生成5个等间隔的数
print(linspace_array)
​

三、基本矩阵运算

3.1 矩阵的形状与大小

可以使用 shapesize属性获取数组的形状和大小:

print(array_2d.shape)  # 输出形状(行数,列数)
print(array_2d.size)   # 输出数组中元素的总数
​

3.2 矩阵的转置

使用 transpose()方法或 T属性转置矩阵:

transposed_array = array_2d.T
print(transposed_array)
​

3.3 矩阵的连接与分割

可以使用 np.concatenate()连接数组,使用 np.split()分割数组:

# 数组连接
array_a = np.array([[1, 2], [3, 4]])
array_b = np.array([[5, 6], [7, 8]])
concatenated_array = np.concatenate((array_a, array_b), axis=0)  # 按行连接
print(concatenated_array)

# 数组分割
split_arrays = np.split(concatenated_array, 2, axis=0)  # 按行分割成2部分
print(split_arrays)
​

四、矩阵运算

NumPy支持多种基本的矩阵运算,包括加法、减法、乘法、除法等。

4.1 元素级运算

NumPy数组支持元素级运算,所有运算符的操作都是逐元素进行的。

# 矩阵加法
array_c = np.array([[1, 2], [3, 4]])
array_d = np.array([[5, 6], [7, 8]])
addition_result = array_c + array_d
print(addition_result)

# 矩阵减法
subtraction_result = array_c - array_d
print(subtraction_result)

# 矩阵乘法
multiplication_result = array_c * array_d  # 逐元素相乘
print(multiplication_result)

# 矩阵除法
division_result = array_c / array_d  # 逐元素相除
print(division_result)
​

4.2 矩阵乘法

进行矩阵乘法时,可以使用 np.dot()@运算符。

# 矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
dot_product = np.dot(matrix_a, matrix_b)  # 使用np.dot()
print(dot_product)

# 使用@运算符
dot_product_operator = matrix_a @ matrix_b
print(dot_product_operator)
​

4.3 矩阵求逆

使用 np.linalg.inv()求矩阵的逆。

matrix_e = np.array([[1, 2], [3, 4]])
inverse_matrix = np.linalg.inv(matrix_e)
print(inverse_matrix)
​

4.4 行列式计算

使用 np.linalg.det()计算矩阵的行列式。

determinant = np.linalg.det(matrix_e)
print(determinant)
​

五、广播机制

NumPy支持广播(Broadcasting)机制,使得不同形状的数组在运算时可以进行适当的扩展。

5.1 广播示例

array_x = np.array([[1, 2, 3], [4, 5, 6]])
array_y = np.array([1, 2, 3])  # 一维数组

# 广播机制使得array_y的形状扩展到(2, 3)
broadcast_result = array_x + array_y
print(broadcast_result)
​

六、高级矩阵运算

NumPy还支持更复杂的线性代数运算,如特征值和特征向量的计算。

6.1 特征值和特征向量

使用 np.linalg.eig()计算特征值和特征向量。

eigenvalues, eigenvectors = np.linalg.eig(matrix_e)
print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)
​

七、总结与思维导图

通过本文的详细讲解,您已经掌握了NumPy中的矩阵运算,包括基础数组创建、基本运算、矩阵乘法、逆、行列式以及广播机制等。NumPy是进行科学计算的重要工具,灵活运用它将大大提升您的工作效率。

目录
相关文章
|
8月前
|
监控 容灾 Java
系统稳定性建设三件事
本文分享了作者学习稳定性工作、构建思路、落实方案,面对问题不断反思再推进的经验总结。
系统稳定性建设三件事
|
4月前
|
Web App开发 网络协议 应用服务中间件
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
HTTP/2 是 HTTP/1.1 的重要升级,通过多路复用、头部压缩、服务器推送等特性显著提升性能与效率。本文详细解析了 HTTP/2 的优势、配置方法及实际应用,涵盖 Nginx/Apache/IIS 配置、curl 测试工具使用,并对比 HTTP/1.1 指出其优化点。同时提醒需注意 HTTPS 支持、客户端兼容性等问题,助你高效掌握并运用 HTTP/2 技术。
397 5
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
|
7月前
|
C语言 C++ 容器
【数据结构】二叉搜索树(二叉排序树)
本文介绍了二叉搜索树(Binary Search Tree, BST)的定义、实现及其性能分析。二叉搜索树是一种特殊的二叉树,其特点是左子树所有节点值小于根节点值,右子树所有节点值大于根节点值,且每个子树也满足此特性。文中详细讲解了BST的节点结构、插入、查找、删除等操作的实现,并通过C++代码展示了这些功能。此外,还讨论了BST的性能:在理想情况下,时间复杂度接近O(logN),但在最坏情况下可能退化为O(N)。为了提高效率,后续将学习自平衡二叉搜索树如AVL树和红黑树。掌握BST有助于理解STL中的set和map容器。感谢阅读,欢迎点赞支持。
488 9
|
10月前
|
存储 JSON 开发工具
三、HarmonyOS NEXT应用开发:ArkTS工程目录结构(Stage模型)
本文介绍了HarmonyOS NEXT应用开发中ArkTS工程的目录结构(Stage模型),包括AppScope、entry、hvigor、oh_modules等主要目录及其作用。重点解析了entry目录下的src > main > resources目录结构,详细说明了base、限定符目录和rawfile的作用,以及如何引用资源文件。
501 1
|
监控 安全 API
什么是 API?
API 即应用程序编程接口(Application Programming Interface),它是一组定义了软件组件之间如何交互的规则和协议。可以将 API 想象成一个服务的 “窗口”,通过这个窗口,不同的软件程序可以相互通信、共享数据和功能。 例如,当你使用手机上的天气应用时,这个应用可能会通过调用气象部门提供的 API 来获取实时的天气数据。
8328 12
|
Python
python中的reduce(function, iterable[, initializer])
【4月更文挑战第4天】`reduce()` 是 Python 的内置函数(Python 3 需从 `functools` 导入),用于对列表或元组等可迭代对象进行累积操作。它接收一个二元操作函数和一个可迭代对象,连续应用函数至所有元素,最终得到单一结果。可选参数 `initializer` 用于设置初始值。示例展示了使用 `lambda` 计算元素之和、乘积以及带有初始值的例子。
242 0
python中的reduce(function, iterable[, initializer])
|
存储 安全 Linux
网络请求的高效处理:C++ libmicrohttpd库详解
网络请求的高效处理:C++ libmicrohttpd库详解
|
分布式计算 安全 Hadoop
Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法
本文介绍了Hadoop集群安全模式的相关命令和问题解决。当集群处于安全模式时,可使用`hdfs dfsadmin -safemode get`检查状态,`enter`进入,`leave`或`forceExit`离开。若因数据块不一致导致安全模式持续,可通过强制退出,然后删除丢失数据块的文件以恢复正常。如果遇到权限问题,可以使用`chmod`授权或关闭HDFS权限验证(不推荐),配置修改后需重启集群生效。
1531 0
Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法
|
存储 缓存 Java
JVM的即时编译(JIT)优化原理:加速程序的执行
JVM的即时编译(JIT)优化原理:加速程序的执行
|
安全 Java UED
Header Location重定向机制解析与应用
Header Location重定向机制解析与应用