【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)

2023-09-13 20:47:53

目录

一、前言

二、实验环境

三、NumPy

0、多维数组对象(ndarray)

多维数组的属性

1、创建数组

2、数组操作

3、数组数学

1. 元素级别

a. 直接运算

b. 加法:np.add()函数

c. 减法:np.subtract()函数

d. 乘法:np.multiply()函数

e. 除法:np.divide()函数

f. 幂运算:np.power()函数

g. 取余与求商:

2. 数组级别

a. 平均值:np.mean()

b. 最大值和最小值:np.max()、np.min()

c. 求和:np.sum()

d. 标准差和方差:np.std()、np.var()

3. 矩阵级别

a. 矩阵乘法

b. 矩阵转置

c. 矩阵求逆

d. 行列式

e. 特征值和特征向量

f. 矩阵的迹

g. 点积

4. 其他数学函数

a. 三角函数

b. 指数和对数函数

c. 取整函数

d. 绝对值

e. 累加和和累积


一、前言

        Python是一种高级编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名,并且具有强大的功能和广泛的应用领域。Python具有丰富的标准库和第三方库,可以用于开发各种类型的应用程序,包括Web开发、数据分析、人工智能、科学计算、自动化脚本等。

        Python本身是一种伟大的通用编程语言,在一些流行的库(numpy,scipy,matplotlib)的帮助下,成为了科学计算的强大环境。本系列将介绍Python编程语言和使用Python进行科学计算的方法,主要包含以下内容:

  • Python:基本数据类型、容器(列表、元组、集合、字典)、函数、类
  • Numpy:数组创建、数组操作、数组数学、广播
  • Matplotlib:绘图,子图,图像
  • IPython:创建笔记本,典型工作流程

二、实验环境

numpy1.21.6
python3.7.16
  • 运行下述命令检查Python版本
 python --version 
  • 运行下述代码检查Python、NumPy版本
import sys
import numpy as np

print("Python 版本:", sys.version)
print("NumPy 版本:", np.__version__)

三、NumPy

        NumPy(Numerical Python)是一个用于科学计算的Python库。它提供了一个强大的多维数组对象(ndarray),用于进行高效的数值运算和数据处理。Numpy的主要功能包括:

  1. 多维数组:Numpy的核心是ndarray对象,它是一个多维数组,可以存储同类型的元素。这使得Numpy非常适合处理向量、矩阵和其他多维数据结构。

  2. 数学函数:Numpy提供了许多常用的数学函数,如三角函数、指数函数、对数函数等。这些函数可以直接应用于整个数组,而无需编写循环。

  3. 广播(Broadcasting):Numpy支持不同形状的数组之间的运算,通过广播机制,可以对形状不同的数组进行逐元素的操作,而无需显式地编写循环。

  4. 线性代数运算:Numpy提供了丰富的线性代数运算函数,如矩阵乘法、求解线性方程组、特征值计算等。

  5. 随机数生成:Numpy包含了用于生成各种概率分布的随机数的函数,如均匀分布、正态分布、泊松分布等。

  6. 数据操作:Numpy提供了很多用于操作数组的函数,如切片、索引、排序、去重等。

        Numpy广泛应用于科学计算、数据分析、机器学习等领域。它的高效性和便捷性使得它成为Python数据科学生态系统中不可或缺的组成部分。

0、多维数组对象(ndarray)

        NumPy的ndarray对象是NumPy库中最重要的对象之一,也是进行科学计算的核心数据结构。ndarray代表了一个多维的数组,可以存储相同类型的元素。

多维数组的属性

  • ndarray.shape:返回表示数组形状的元组,例如(2, 3)表示2行3列的数组。
  • ndarray.dtype:返回数组中元素的数据类型,例如intfloatbool等。
  • ndarray.ndim:返回数组的维度数,例如1表示一维数组,2表示二维数组。

1、创建数组

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501

2、数组操作

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501

3、数组数学

1. 元素级别

        NumPy提供了许多在数组元素级别进行数学运算的函数,例如加法、减法、乘法、除法、幂运算等。这些函数会对数组中的每个元素进行相应的数学计算,并返回一个新的数组作为结果。

a. 直接运算
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 加法
result = arr1 + arr2
print(result)  # 输出: [5 7 9]

# 减法
result = arr1 - arr2
print(result)  # 输出: [-3 -3 -3]

# 乘法
result = arr1 * arr2
print(result)  # 输出: [4 10 18]

# 除法
result = arr1 / arr2
print(result)  # 输出: [0.25 0.4  0.5]

b. 加法:np.add()函数
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 数组元素级别的加法
result = np.add(arr1, arr2)
print(result)

输出:

[5 7 9]

c. 减法:np.subtract()函数
import numpy as np

arr1 = np.array([4, 5, 6])
arr2 = np.array([1, 2, 3])

# 数组元素级别的减法
result = np.subtract(arr1, arr2)
print(result)

输出:

[3 3 3]
 
d. 乘法:np.multiply()函数
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 数组元素级别的乘法
result = np.multiply(arr1, arr2)
print(result)

输出:

[ 4 10 18]
 
e. 除法:np.divide()函数
import numpy as np

arr1 = np.array([4, 6, 8])
arr2 = np.array([2, 3, 4])

# 数组元素级别的除法
result = np.divide(arr1, arr2)
print(result)

输出:

[2. 2. 2.]
 
f. 幂运算:np.power()函数
import numpy as np

arr = np.array([1, 2, 3])

# 数组元素级别的幂运算
result = np.power(arr, 2)
print(result)

输出:

[1 4 9]

g. 取余与求商:
import numpy as np

arr1 = np.array([7, 8, 9])
arr2 = np.array([2, 3, 4])

# 数组的取余
result = np.mod(arr1, arr2)
print(result)  # 输出: [1 2 1]

# 数组的求商
result = np.divmod(arr1, arr2)
print(result)  # 输出: (array([3, 2, 2]), array([1, 2, 1]))

2. 数组级别

a. 平均值:np.mean()
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的平均值
mean_value = np.mean(arr)
print(mean_value)

输出:

3.0
 
b. 最大值和最小值:np.max()np.min()

        使用np.max()np.min()函数分别计算数组的最大值和最小值。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的最大值和最小值
max_value = np.max(arr)
min_value = np.min(arr)

print(max_value, min_value)

输出:

5 1
c. 求和:np.sum()

        计算数组所有元素的和

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的元素和
sum_value = np.sum(arr)
print(sum_value)

输出:

15
d. 标准差和方差:np.std()np.var()

        使用np.std()np.var()函数计算数组的标准差和方差

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 计算数组的标准差和方差
std_value = np.std(arr)
var_value = np.var(arr)

print(std_value, var_value)

输出:

1.4142135623730951 2.0

3. 矩阵级别

a. 矩阵乘法
import numpy as np

matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# 矩阵乘法
result = np.matmul(matrix1, matrix2)
# 或者使用 @ 运算符
# result = matrix1 @ matrix2

print(result)

输出结果为:

[[19 22]
 [43 50]]

b. 矩阵转置
import numpy as np

matrix5 = np.array([[1, 2], [3, 4]])
result = np.transpose(matrix5)
# 或者使用 .T 属性
# result = matrix5.T
print(result)

转置结果:
 

[[1 3]
[2 4]]

c. 矩阵求逆
import numpy as np


matrix6 = np.array([[1, 2], [3, 4]])
result = np.linalg.inv(matrix6)
print(result)

求逆结果为:

[[-2. 1. ]
[ 1.5 -0.5]]

d. 行列式
import numpy as np

matrix7 = np.array([[1, 2], [3, 4]])
result = np.linalg.det(matrix7)
print(result)

行列式结果:

-2.0000000000000004

e. 特征值和特征向量
import numpy as np

matrix8 = np.array([[1, 2], [3, 4]])
eigenvalues, eigenvectors = np.linalg.eig(matrix8)
print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)

输出:

特征值: [-0.37228132 5.37228132]
特征向量: [[-0.82456484 -0.41597356]

f. 矩阵的迹
import numpy as np

matrix9 = np.array([[1, 2], [3, 4]])
result = np.trace(matrix9)
print(result)

输出:

5

g. 点积

        向量的点积是指两个向量对应位置的元素相乘后再求和的运算。

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 使用 np.dot 函数计算向量的点积
result = np.dot(arr1, arr2)
print(result)  # 输出: 32

# 使用数组对象的 dot 方法计算向量的点积
result = arr1.dot(arr2)
print(result)  # 输出: 32

4. 其他数学函数

a. 三角函数
import numpy as np

arr = np.array([0, np.pi/2, np.pi])

# 正弦函数
result = np.sin(arr)
print(result)  # 输出: [0. 1. 0.]

# 余弦函数
result = np.cos(arr)
print(result)  # 输出: [1. 0. -1.]

# 正切函数
result = np.tan(arr)
print(result)  # 输出: [0. 无穷大 -0.]

b. 指数和对数函数
import numpy as np

arr = np.array([1, 2, 3])

# 指数函数
result = np.exp(arr)
print(result)  # 输出: [2.71828183 7.3890561  20.08553692]

# 自然对数
result = np.log(arr)
print(result)  # 输出: [0. 0.69314718 1.09861229]

# 以2为底的对数
result = np.log2(arr)
print(result)  # 输出: [0. 1. 1.5849625]

c. 取整函数
import numpy as np

arr = np.array([1.4, 2.7, 4.1])

# 向下取整
result = np.floor(arr)
print(result)  # 输出: [1. 2. 4.]

# 向上取整
result = np.ceil(arr)
print(result)  # 输出: [2. 3. 5.]

# 四舍五入
result = np.round(arr)
print(result)  # 输出: [1. 3. 4.]

d. 绝对值
import numpy as np

arr = np.array([-1, -2, 3, -4, 5])

# 数组元素的绝对值
result = np.abs(arr)
print(result)  # 输出: [1 2 3 4 5]

e. 累加和和累积
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 累加和
result = np.cumsum(arr)
print(result)  # 输出: [ 1  3  6 10 15]

# 累积积
result = np.cumprod(arr)
print(result)  # 输出: [  1   2   6  24 120]

更多推荐

SSM整合(细节拉满)|将Mybatis、Spring、SpringMVC三个框架整合起来,通过一个demo来练习

环境要求环境:IDEAMySQL5.7.19Tomcat9Maven3.6要求:需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识;数据库环境创建一个存放书籍数据的数据库表,并插入一些示例数据SSM整合新建一个空的Maven项目导入相关依赖将数据库与IDEA连接起来把项目结构

解决Spring Boot 2.7.16 在服务器显示启动成功无法访问问题:从本地到服务器的部署坑

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

如何高效管理多个 Outlook 邮箱?

在我们日常工作和生活中,使用多个Outlook邮箱可以带来一定的便利和灵活性。本文将介绍多个Outlook邮箱的用途,以及如何注册多个Outlook邮箱并确保它们之间不关联。最后,我们将讨论管理多个Outlook邮箱所面临的困难,并介绍一个解决方案——VMLogin浏览器,可以高效管理多个账号并防止关联问题。一、多个O

RocketMQ 发送事务消息

文章目录事务的相关理论事务ACID特性CAP理论BASE理论事务消息应用场景MQ事务消息处理处理逻辑RocketMQ事务消息处理流程官网事务消息流程图rocketmq-client-java示例(gRPC协议)创建事务主题生产者消费者rocketmq-client示例(Remoting协议)生产者消费者事务的相关理论事

初识ElasticSearch

文章目录初识ElasticSearch前言1、初识ElasticSearch1.1ES概述1.2倒排索引1.3ES中的一些常见概念1.4安装ES和Kibana2、索引库操作2.1Mapping映射属性2.2索引库的CRUD2.2.1创建索引和映射2.2.2查询索引库2.2.3修改索引库2.2.4删除索引库3、文档操作3

走近ChatGPT与类似产品:原理解析与比较

目录1.引言1.1技术的进步与自然语言处理1.2ChatGPT的崭新概念2.ChatGPT:一览众山小2.1GPT-3.5架构简介2.2ChatGPT的学习与训练2.3文本生成的工作原理3.市场上类似产品调研3.1对话式人工智能产品分类3.2文心一言3.3讯飞星火4.应用前景与局限性展望4.1ChatGPT的未来应用场

【学习笔记】多模态综述

多模态综述前言1.CLIP&ViLT2.ALBEF3.VLMO4.BLIP5.CoCa6.BeiTv3总结参考链接前言本篇学习笔记虽然是多模态综述,本质上是对ViLT后多模态模型的总结,时间线为2021年至2022年,在这两年,多模态领域的模型也是卷的飞起,不断刷新领域的SOTA。在模型结构和数据上提出了很多高效有用的

【数据结构】图的遍历:广度优先(BFS),深度优先(DFS)

目录1、广度优先(BFS)算法思想广度优先生成树知识树代码实现2、深度优先(DFS)算法思想深度优先生成树知识树代码实现1、广度优先(BFS)算法思想图的广度优先遍历(BFS)是一种遍历图的算法,其思想是从起始顶点开始遍历图,先访问起始顶点的所有直接邻居,然后遍历这些邻居的直接邻居,以此类推,直到遍历完整个图。BFS算

竞赛选题 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录0简介1二维码检测2算法实现流程3特征提取4特征分类5后处理6代码实现5最后0简介🔥优质竞赛项目系列,今天要分享的是基于机器学习的二维码识别检测-opencv二维码识别检测机器视觉该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🧿更多资料,项目分享:https://gitee.com/dancheng-

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(四)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.数据预处理2.数据增强3.模型构建4.模型训练及保存5.模型评估6.模型测试1)权限注册2)模型导入3)总体模型构建4)处理视频中的预览帧数据5)处理图片数据6)多页面设置7)布局文件代码相关其它博客工程源代码下载其它资料下载前言本项目依赖于Keras深度学习

【操作系统笔记】任务调度&信号处理&CPU上下文

任务调度何时需要调度执行一个任务?第一:当任务创建的时候,需要决定是继续执行父进程,还是调度执行子进程第二:在一个任务退出时,需要做出调度决策,需要从TASK_RUNNING状态的所有任务中选择一个任务来执行第三:当一个任务阻塞在I/O上,或者因为其他原因阻塞,必须调度另一个任务执行第四:在一个I/O中断发生时,必须做

热文推荐