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

news2024/11/29 1:54:32

目录

一、前言

二、实验环境

三、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]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis-带你深入学习数据类型zset

目录 1、zset有序集合 2、zset相关命令 2.1、添加或更新指定的元素——zadd 2.2、获取有序集合zset的元素个数相关命令:zcard、zcount 2.3、返回指定区间元素相关命令:zrange、arevrange、zrangebyscore 2.4、删除相关命令:zpopmax、zp…

C# 模拟button按钮批量锁住与打开

项目需求: 当winform界面上存在多个按钮时(大于2个),用户需求为当点击其中一个按钮后,其它按钮全部为禁用,当被点击的按钮后台逻辑执行完成后,再释放所有按钮。用户可再次点击其它按钮。 此案…

Eclipse官网下载历史版本

进入官网 https://www.eclipse.org/ 进入下载页面 选择下载包 同一版本,又有不同类型 Eclipse IDE for Enterprise Java and Web Developers Eclipse IDE for Java Developers 任何Java开发人员必备的工具,包括Java IDE、Git客户端、XML编辑器、Mave…

第33章_瑞萨MCU零基础入门系列教程之DHT11温湿度获取实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

数据采集:数据挖掘的基础

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

解决gyp verb `which` failed python2 Error: not found: python2

运行老项目遇到如下报错 PS C:\Users\demo02> yarn install yarn install v1.22.19 info No lockfile found. [1/5] Validating package.json... [2/5] Resolving packages... warning axios0.18.1: Critical security vulnerability fixed in v0.21.1. For more informati…

4.1.8- Web 应用程序使用的组件进行指纹识别

Web 应用程序使用的组件进行指纹识别 IDWSTG-INFO-08 总结 毫不夸张地说,几乎所有可以想象的Web应用程序的想法都已经投入开发。随着全球大量自由和开源软件项目的积极开发和部署,应用程序安全测试很可能会遇到完全或部分依赖于这些知名应用程序或框架…

vue cli npm run build打生产环境包报错Cannot read property ‘pop‘ of undefined

问题出在webpack配置的代码拆分splitChunks 解决办法:每个cacheGroups中配置enforce: true;

数据结构——排序算法——快速排序

快速排序算法的基本思想是 1.从数组中取出一个数,称之为基数(pivot) 2.遍历数组,将比基数大的数字放到它的右边,比基数小的数字放到它的左边。遍历完成后,数组被分成了左右两个区域 3.将左右两个区域视为两…

巧用Lambda表达式获取对象属性名告别魔法值

在我们日常开发中,使用 MyBatis-Plus 写 SQL 执行的时候,难免会用到表字段,虽然 MyBatis-Plus 提供了 LambdaQueryWrapper 帮助我们使用 Lambda 方式调用对象属性名,但有的时候还是不免用到魔法值,当对象的属性名更改了…

检索技术核心学习总结

一、学习检索技术的必要性分析 (一)关键原因分析 学习检索技术(Information Retrieval,IR)具有多种重要的原因,特别是在今天信息爆炸的数字化时代。 总的来说,学习检索技术有助于提高信息处理…

基于Python和mysql开发的商城购物管理系统分为前后端(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的商城购物管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过…

Elasticsearch:什么是生成式人工智能?

生成式人工智能定义 给学生的解释(基本): 生成式人工智能是一种可以创造新的原创内容的技术,例如艺术、音乐、软件代码和写作。 当用户输入提示时,人工智能会根据从互联网上现有示例中学到的知识生成响应,…

记一次线上BUG排查过程

1. 线上遇到一个非常奇怪的bug,为一个用户分配业务线类型后,该用户登录时,提示502,但其它的用户登录完全是正常的 2. 问题现象 3. 排查思路 先去看线上日志,看是否有error,但日志里边这个接口200正常返回…

业务中如何拓展微前端架构

站在整体架构的角度,微前端可以分为以下几类拓展迭代方向。 注册更多微应用 随着业务的扩展,我们可以在主应用中注册更多的微应用。每个微应用是一个独立的子系统,只需要在主应用的注册列表中添加新的项,配置微应用的名称、入口、活动规则等信息即可。 集成微应用…

【element-ui】el-date-picker 之picker-options时间选择区间禁用效果的实现

element-ui 时间选择器的时间区间禁用dom层引入:picker-option <el-date-pickerv-model"searchFormObj.workTime"clearablevalue-formate"yyyy-MM-dd":picker-options"pickerOptions"placeholder"请选择时间" ></el-date-pi…

应用在儿童平板防蓝光中的LED防蓝光灯珠

现在电子产品多&#xff0c;手机、平板电脑、电子书等等&#xff0c;由于蓝光有害眼睛健康&#xff0c;于是市场上有很多防蓝光的眼镜、防蓝光的手机膜、防蓝光的平板&#xff0c;这些材料和设备到底有没有用&#xff1f;如何正确预防蓝光危害呢&#xff1f; 我们现在所用的灯…

借助工业PoE交换机实现智慧停车场管理

停车场是现代城市的重要基础设施&#xff0c;而且随着汽车保有量的持续增长&#xff0c;城市中也出现了数百甚至上千停车位的大型、超大型停车场&#xff0c;而这些大型停车场的管理和服务也是一个难题。 针对大型停车场的管理&#xff0c;可以借助工业PoE交换机&#xff0c;快…

postman和node.js的使用、YApi 新版如何查看 http 请求数据

一 nodejs下载 下载链接&#xff1a; nodejs官网&#xff1a; https://nodejs.org/zh-cn/download 我使用的windows .msi安装方式&#xff0c;双击一直下一步就行 当前安装完成后的版本&#xff1a;1.下载 2.安装步骤 下载完成后&#xff0c;双击安装包&#xff0c;开始安装&…

LoGoNet:基于局部到全局跨模态融合的精确 3D 目标检测

论文地址&#xff1a;https://arxiv.org/abs/2303.03595 论文代码&#xff1a;https://github.com/sankin97/LoGoNet 论文背景 激光雷达传感器点云通常是稀疏的&#xff0c;无法提供足够的上下文来区分远处的区域&#xff0c;从而造成性能次优。 激光雷达-摄像机融合方法在三…