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

目录

一、前言

二、实验环境

三、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 npprint("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 nparr1 = 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 nparr1 = 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 nparr1 = 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 nparr1 = 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 nparr1 = 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 nparr = np.array([1, 2, 3])# 数组元素级别的幂运算
result = np.power(arr, 2)
print(result)

输出:

[1 4 9]

g. 取余与求商:

import numpy as nparr1 = 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 nparr = 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 nparr = 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 nparr = 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 nparr = 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 npmatrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])# 矩阵乘法
result = np.matmul(matrix1, matrix2)
# 或者使用 @ 运算符
# result = matrix1 @ matrix2print(result)

输出结果为:

[[19 22][43 50]]

b. 矩阵转置

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

转置结果:
 

[[1 3]
[2 4]]

c. 矩阵求逆

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

求逆结果为:

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

d. 行列式

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

行列式结果:

-2.0000000000000004

e. 特征值和特征向量

import numpy as npmatrix8 = 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 npmatrix9 = np.array([[1, 2], [3, 4]])
result = np.trace(matrix9)
print(result)

输出:

5

g. 点积

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

import numpy as nparr1 = 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 nparr = 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 nparr = 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 nparr = 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 nparr = np.array([-1, -2, 3, -4, 5])# 数组元素的绝对值
result = np.abs(arr)
print(result)  # 输出: [1 2 3 4 5]

e. 累加和和累积

import numpy as nparr = 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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/134304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明

一、文件-新建-新建项目 二、传统应用形态与IDE自带的模板可供选用与免安装的元服与IDE中自带模板的选择 三、以元服务,远程模拟器为例说明IDE整体结构 1区是工程目录结构,是最基本的配置与开发路径等的认知。 2区是代码开发与修改区,是开发…

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息:文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下,并执行tar -xvf Vim 即可。 …

【深度学习】Pytorch 系列教程(十四):PyTorch数据结构:6、模块(Module):前向传播

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量(Tensor) 2、张量操作(Tensor Operations) 3、变量(Variable) 4、数据集(Dataset) 5、数据加载器&#x…

CDH集群部署

文章目录 1. 资源准备2. 部署 Mariadb 数据库3. 安装CM服务4. 安装数据节点5. 登录CM系统 1. 资源准备 准备好CDH安装包资源,官方网站下载需要账号,如果没有账号可以去网上到处搜搜。主要涉及到的资源有: cloudera-manager-servercloudera-m…

虹科分享 | 软件供应链攻击如何工作?如何评估软件供应链安全?

说到应用程序和软件,关键词是“更多”。在数字经济需求的推动下,从简化业务运营到创造创新的新收入机会,企业越来越依赖应用程序。云本地应用程序开发更是火上浇油。然而,情况是双向的:这些应用程序通常更复杂&#xf…

SPF9139全力适配ios16与鸿蒙3.0,超实用数据提取、分析、恢复能力UP!

​ 如今,群聊已成为人们必不可少的沟通窗口 家人群,好友群,班级群 粉丝群,交友群,工作群 …… 各类群聊铺天盖地般涌来的同时 也有一些群聊沦为了 赌博、传播淫秽视频、发表不当言论 等违法犯罪行为滋生之地 与…

开源日报 0825 | 简化开发过程,提升Swift应用性能的扩展工具库

OpenZeppelin/openzeppelin-contracts Stars: 22.8k License: MIT OpenZeppelin Contracts 是一个用于安全智能合约开发的库。它建立在社区验证过的代码基础上,具有以下主要功能: 实现了 ERC20 和 ERC721 等标准。灵活的基于角色的权限控制方案。可重…

Jenkins :添加node权限获取凭据、执行命令

拥有Jenkins agent权限的账号可以对node节点进行操作,通过添加不同的node可以让流水线项目在不同的节点上运行,安装Jenkins的主机默认作为master节点。 1.Jenkins 添加node获取明文凭据 通过添加node节点,本地监听ssh认证,选则凭…

iOS系统暗黑模式

系统暗黑模式: 暗黑模式颜色适配: 方式1: Assets配置:在Assets中配置好颜色后,可以通过colorNamed: 放大获取到动态颜色。 方式2:代码配置,通过代码colorWithDynamicProvider: 可以看出来生成…

移动端H5封装一个 ScrollList 横向滚动列表组件,实现向左滑动

效果&#xff1a; 1.封装组件&#xff1a; <template><div class"scroll-list"><divclass"scroll-list-content":style"{ background, color, fontSize: size }"ref"scrollListContent"><div class"scroll…

arcgis实现矢量数据的局部裁剪

目录 环境介绍&#xff1a; 操作任务&#xff1a; 方法一&#xff1a;通过arcgis直接选取要素并保存出来 方法二&#xff1a;通过已知的经纬范围&#xff0c;掩膜获取该范围内的矢量数据 环境介绍&#xff1a; Windows操作系统、arcgis10.8 操作任务&#xff1a; 从整体的…

3ds max文件打包?max插件CG Magic一键打包整起!

3ds max文件如何打包&#xff1f;这个问题&#xff0c;小编听到不少网友的提问&#xff01; 今天CG Magic小编来和大家聊聊&#xff0c;文件更高效的操作&#xff0c;如何打包处理呢&#xff1f; 3DMAX这款软件的受众群体是比较高的&#xff0c;在工作方便的同时&#xff0c;…

uniapp h5 echarts 打包后图表点击失效/及其他失效

文章目录 期望效果实际效果环境引入echarts方式解决方法&#xff1a;注意 原因多说一句在h5打包的时候将 history 改为 hash 不然在浏览器打开后刷新会404 期望效果 实际效果 环境 pc端 window11 hbuilderx版本 3.8.12 echarts版本 5.4.3 引入echarts方式 npm install echar…

二,手机硬件参数介绍和校验算法

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…

Css实现右上角飘带效果

效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style type"text/css">*{margin: 0 auto;padding: 0;}.wrap {/* 设置宽高 */width: 350px;height: …

Vue 安装与创建第一Docker的项目

1. 下载nodejs 并且安装 https://nodejs.org/en 2. 打开命令窗口&#xff0c;验证是否安装成功 C:\Users\Harry>node -v v18.16.0C:\Users\Harry>npm -v 9.5.1 3. 安装Vue CLI C:\Users\Harry>npm install -g vue/cli 经过不算漫长的等待&#xff0c;你的Vue CLI就装…

CSS——grid网格布局的基本使用

网格布局在实现页面自适应&#xff0c;大屏可视化中常常使用&#xff0c;在这篇博客里&#xff0c;记录一下网格布局的基本使用。 参考文档&#xff1a;网格布局_菜鸟教程 文章目录 1. 体会grid的自适应性2. grid-template-arr配置网格行列3. 网格单位fr与repeat()简写属性值4…

SpringMVC中的JSR303与拦截器的使用

一&#xff0c;JSR303的概念 JSR303是Java中的一个标准&#xff0c;用于验证和校验JavaBean对象的属性的合法性。它提供了一组用于定义验证规则的注解&#xff0c;如NotNull、Min、Max等。在Spring MVC中&#xff0c;可以使用JSR303注解对请求参数进行校验。 1.2 为什么要使用J…

腾讯mini项目-【指标监控服务重构】2023-08-11

今日待办 使用watermill框架替代当前的base_runner框架 a. 参考官方提供的sarama kafka Pub/Sub(https://github.com/ThreeDotsLabs/watermill-kafka/)实现kafka-go(https://github.com/segmentio/kafka-go)的Pub/Sub&#xff08;sarama需要cgo&#xff0c;会导致一些额外的镜像…

nginx配置指南

nginx.conf配置 找到Nginx的安装目录下的nginx.conf文件&#xff0c;该文件负责Nginx的基础功能配置。 配置文件概述 Nginx的主配置文件(conf/nginx.conf)按以下结构组织&#xff1a; 配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理…