Python 学习之NumPy(一)

文章目录

  • 1.为什么要学习NumPy
  • 2.NumPy的数组变换以及索引访问
  • 3.NumPy筛选使用介绍
    • 筛选出上面nb数组中能被3整除的所有数
    • 筛选出数组中小于9的所有数
    • 提取出数组中所有的奇数
    • 数组中所有的奇数替换为-1
    • 二维数组交换2列
    • 生成数值5—10,shape 为(3,5)的二维随机浮点数
  • NumPy数组维度等进阶操作
    • NumPy做矩阵乘法实现的两种方法
    • NumPy求平均值,求和
    • NumPy 求标准差,方差
    • NumPy 求最大最小值,累和和累乘
    • NumPy求迹
    • 高维数组变为向量
    • 增加或删除维度的实现方法

1.为什么要学习NumPy

通过一个案例来比较分析numpy和python的数值计算性能

import time
import numpy as np

list = range(int(10e6))

tis1 =time.perf_counter()
a = [i*2 for i in list]
tis2 =time.perf_counter()

print(tis2-tis1)

na = np.array(range(int(10e6)))

tis1 =time.perf_counter()
na2 = na * 2
tis2 =time.perf_counter()
print(tis2-tis1)

在这里插入图片描述
通过上面的案例 可以看出 NumPy 的数值计算能力比python自带的要快一个数量级,所以NumPy 值得我们学习它。

2.NumPy的数组变换以及索引访问

# 创建一个所有元素为True 二维数组
a = np.ones((3,5)) == 1
print(a)

# 创建一个所有元素为Flase 二维数组
b = np.zeros((3,5)) == 1
print(b)

#一维数组转二维
na = np.arange(100)
print(na)
nb = na.reshape((20,5))
print(nb)

#numpy 索引

#访问第一行第一列的元素
print(nb[1,1])

#返回第一行数组
print(nb[0])

#返回数组的前3行(切片)
print(nb[:3])

#返回数组的第一列
print(nb[:,0])

#返回数组的前3列
print(nb[:,:3])

#返回数组前3行前3列
print(nb[:3,:3])

3.NumPy筛选使用介绍

筛选出上面nb数组中能被3整除的所有数

print(nb[nb % 3 == 0])

筛选出数组中小于9的所有数

print(nb[nb < 9])

提取出数组中所有的奇数

print(nb[nb % 2 != 0])

数组中所有的奇数替换为-1

#numpy 中 where的使用 3个参数 类似 三目运算符 第一个参数是条件表达式 第二个是符合条件表达式的结果 第三个是不符合的结果
print(np.where(nb % 2 == 0, nb, -1))

二维数组交换2列

#交换第一列和第三列
print(nb[:, [0, 3, 2, 1, 4]])

mask = list(range(5))
mask[1], mask[3] = mask[3], mask[1]
print(nb[:, mask])

生成数值5—10,shape 为(3,5)的二维随机浮点数

n1 = np.random.randint(5, 10, (3, 5))
print(n1)

# 0,1 的二维随机数组
n2 = np.random.rand(3, 5)

print(n1 + n2)

NumPy数组维度等进阶操作

NumPy做矩阵乘法实现的两种方法

v1 = np.arange(3).reshape(1, 3)
v2 = np.arange(6).reshape(3, 2)

# 点乘
result = np.dot(v1,v2)

# 先将数组转化为矩阵
result1 = np.matrix(v1) * np.matrix(v2)

print(result)
print(result1)

NumPy求平均值,求和

arr = np.random.randint(1, 10, (3, 4))

# 所有数的平均值
arr.mean()

# 按照行求平均值
arr.mean(axis=1)

# 按照列求平均值
arr.mean(axis=0)

#求和
arr.sum(axis=0)
arr.sum(axis=1)

NumPy 求标准差,方差

arr = np.arange(6).reshape(2, 3)

# 标准差
print(arr.std(axis = 1))
# 方差
print(arr.var())

NumPy 求最大最小值,累和和累乘

 array = np.random.randint(1,50,(3,4))
 array.max()
 array.min()
 
 # 累和
 arr = [1,3,5]
 # 累和后
 arr = [1,4,9]
 
  #累加
 array.cumsum(axis = 0)
 # 累乘
 array.cumprod(axis = 0)
  

NumPy求迹

在Python的NumPy库中,可以使用numpy.trace()函数来计算矩阵的迹(trace)。迹是矩阵对角线上元素的和。

以下是使用NumPy计算矩阵迹的示例代码:

import numpy as np

# 创建一个矩阵
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

# 计算矩阵的迹
trace = np.trace(matrix)

print("矩阵迹:", trace)

输出结果:

矩阵迹: 15

在这个示例中,我们创建了一个3x3的矩阵,然后使用np.trace()函数计算了矩阵的迹。最后,我们将迹的结果打印出来。

注意,numpy.trace()函数只能用于二维矩阵,如果要计算高维矩阵的迹,可以先使用numpy.diagonal()函数提取对角线上的元素,然后再求和。

高维数组变为向量

在NumPy中,可以使用numpy.ravel()函数将多维数组转换为一维向量。这个函数会将数组展平成一个连续的一维数组,并按照行优先的顺序进行展平。

以下是使用numpy.ravel()函数将高维数组变为向量的示例代码:

import numpy as np

# 创建一个高维数组
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# 将高维数组展平成向量
vector = np.ravel(arr)

print("向量:", vector)

输出结果:

向量: [1 2 3 4 5 6 7 8 9]

在这个示例中,我们创建了一个3x3的高维数组arr,然后使用np.ravel()函数将其展平为一维向量vector。最后,我们将向量打印出来。

除了np.ravel()函数,还可以使用np.flatten()函数实现类似的功能,两者的区别在于np.ravel()函数返回的是数组的视图(view),而np.flatten()函数返回的是数组的副本(copy)。如果不关心返回的是视图还是副本,可以使用np.ravel()函数更高效。

在NumPy中,除了使用numpy.ravel()函数将多维数组展平为一维向量之外,还可以使用numpy.flatten()方法实现相同的功能。这两个方法在展平数组方面是等效的,但它们有一个重要的区别:

  • numpy.ravel(): 返回一个展平的数组视图(view),如果对返回的视图进行修改,原始数组也会被修改。
  • numpy.flatten(): 返回一个展平的数组副本(copy),对返回的副本进行修改不会影响原始数组。

以下是使用numpy.flatten()方法将高维数组展平为向量的示例代码:

import numpy as np

# 创建一个高维数组
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# 将高维数组展平成向量
vector = arr.flatten()

print("向量:", vector)

输出结果:

向量: [1 2 3 4 5 6 7 8 9]

在这个示例中,我们使用arr.flatten()方法将高维数组arr展平为一维向量vector,并将结果打印出来。

需要注意的是,无论是numpy.ravel()函数还是numpy.flatten()方法,都会将多维数组展平为一维向量,但返回的是视图或副本的区别可能会对内存管理和性能产生一定的影响。因此,在选择使用哪种方法时,可以根据具体的需求和性能要求来进行选择。

增加或删除维度的实现方法

在NumPy中,可以使用以下方法来增加或删除数组的维度:

  1. 增加维度:

    • 使用numpy.newaxisNone关键字:可以在指定位置使用np.newaxisNone关键字来增加新的维度。例如,可以通过arr[:, np.newaxis]在二维数组的列维度之间增加一个新维度。
    import numpy as np
    
    # 创建一个一维数组
    arr = np.array([1, 2, 3])
    
    # 增加新维度
    new_arr = arr[:, np.newaxis]
    
    print("新数组的形状:", new_arr.shape)
    

    输出结果:

    新数组的形状: (3, 1)
    

    在这个示例中,我们使用arr[:, np.newaxis]将一维数组arr在列维度之间增加了一个新维度,得到了形状为(3, 1)的新数组new_arr

    • 使用numpy.expand_dims()函数:该函数可以在指定位置上增加新的维度。第一个参数是输入数组,第二个参数axis是要插入新维度的位置。
    import numpy as np
    
    # 创建一个一维数组
    arr = np.array([1, 2, 3])
    
    # 增加新维度
    new_arr = np.expand_dims(arr, axis=1)
    
    print("新数组的形状:", new_arr.shape)
    

    输出结果:

    新数组的形状: (3, 1)
    

    在这个示例中,我们使用np.expand_dims(arr, axis=1)将一维数组arr在列维度之间增加了一个新维度,得到了形状为(3, 1)的新数组new_arr

  2. 删除维度:

    • 使用numpy.squeeze()函数:该函数可以删除长度为1的维度。默认情况下,它将删除所有长度为1的维度,但也可以通过指定axis参数来仅删除特定位置的长度为1的维度。
    import numpy as np
    
    # 创建一个三维数组
    arr = np.array([[[1], [2], [3]]])
    
    # 删除维度
    new_arr = np.squeeze(arr)
    
    print("新数组的形状:", new_arr.shape)
    

    输出结果:

    新数组的形状: (3,)
    

    在这个示例中,我们使用np.squeeze(arr)删除了长度为1的维度,将原本形状为(1, 3, 1)的三维数组arr转换为形状为(3,)的新数组new_arr

需要注意的是,增加或删除维度时,可以根据具体需求选择合适的方法。numpy.newaxisNone关键字的使用比较灵活,而numpy.expand_dims()numpy.squeeze()函数更具有可读性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache Doris (十七) :Doris分区和分桶3-分桶及建议

​​​目录 一、分桶Bucket ​​​​​​​二、分区和分桶数量和数据量的建议 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 一、分桶Bucket Doris数据表存储中&#xff0c;如果有分区&…

使用docker搭建mysql集群

一、技术架构 1、架构图 2、解说 mysql_1、mysql_2、mysql_3是一组主从模式,同理mysql_4、mysql_5、mysql_6也是一组主从模式从上面的图可以看出mysql_1和mysql_4是主节点,可以进行增删改查操作,但是子几点只能查询操作如果mysql_1节点出现问题了&#xff0c;有mysql_4节点组…

SDK和API是什么?SDK和API的区别与联系

目录 &#x1f48c; SDK和API是什么&#xff1f; SDK API &#x1f48c; SDK和API的区别 &#x1f48c; 该如何选择 API 和 SDK 对接&#xff1f; &#x1f48c; SDK和API是什么&#xff1f; SDK SDK的概念&#xff1a;软件开发工具包&#xff08;全称&#xff1a;Softwa…

黑盟菜鸟剪辑短视频助手是什么

今天我们来讲一下视频综合处理功能&#xff0c;首先我们来打开软件主界面&#xff0c;通过模块化功能合集视频综合处理进入我们的这个功能。首先我们来看一下功能的布局&#xff0c;左边是导入视频的地方&#xff0c;右边是功能区&#xff0c;这里总共包括 32 种功能&#xff0…

计算机基础--->数据结构(6)【AVL树(平衡二叉树)】

文章目录 AVL&#xff08;平衡二叉树&#xff09;树性质AVL树的操作&#xff08;Java&#xff09;节点的创建AVL树的插入1.判断平衡2.保持树的平衡3.判断是否AVL树4.删除节点 全部代码 AVL&#xff08;平衡二叉树&#xff09;树 平衡二叉树是一种特殊的二叉搜索树&#xff0c;他…

【nav_msgs/Path.h发布路径】

#include <nav_msgs/Path.h> 是一个 ROS (Robot Operating System) 中的包含文件。它是用于包含 nav_msgs/Path 消息类型的头文件,这是一个标准的 ROS 消息类型。 nav_msgs/Path 消息类型常用于机器人导航系统中,以表示路径。这种路径通常由一系列的位置点组成,这些点…

解决:yarn 无法加载文件 “C:\Users\admin\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题

1、问题描述&#xff1a; 其一、报错的整体代码为&#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 // 整体的报错代码为 &#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yar…

Linux环境搭建(三)— 搭建数据库服务器

linux &#xff08;ubuntu&#xff09;安装mysql 和环境配置 一、安装MySql二、配置环境三、外网访问四、重置密码五、卸载 写在前面&#xff1a; 本文默认你的Linux系统已经安装vim&#xff0c;yum等&#xff0c;如你使用的是一个全新的操作系统&#xff0c;移步上一篇开始配置…

迪赛智慧数——柱状图(象形动态图):高考填报专业考虑的因素

效果图 填报志愿是高考后的一大重要环节&#xff0c;你的职业生涯就在这里起航了。那么&#xff0c;应该怎么填报志愿呢&#xff1f;高考填报专业考虑的因素很多&#xff0c;过半的人会考虑专业就业前景及薪资&#xff0c;其次是个人兴趣和是否为双一流建设学科。 数据源&…

基于深度学习的高精度动物园动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度动物园动物&#xff08;水牛、斑马、大象、水豚、海龟、猫、奶牛、鹿、狗、火烈鸟、长颈鹿、捷豹、袋鼠、狮子、鹦鹉、企鹅、犀牛、羊、老虎&#xff09;检测识别系统可用于日常生活中或野外来检测与定位动物园动物&#xff0c;利用深度学…

【算法与数据结构】541、LeetCode反转字符串 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题自己写了一个swap函数&#xff0c;用来反转字符串&#xff0c;也可以用库函数reverse。然后是用in…

mac上使用brew安装mysql5.7

使用Homebrew进行MySQL数据库的安装需要MacOS系统中已经安装了相关环境 1.查询软件信息 首先使用search命令搜索MySQL数据库完整名称&#xff1a; brew search mysql可以看到5.7版本的MySQL数据库完整名称是mysql5.7 2. 执行安装命令 使用install命令进行软件安装&#xf…

基于单片机电子密码锁射频卡识别指纹门禁密码锁系统的设计与实现

功能介绍 通过指纹进行开锁或者是按键输入当前的密码&#xff0c;修改密码&#xff0c;对IC卡可以进行注册&#xff0c;删除。当有RFID卡进入到读卡器的读卡范围内时&#xff0c;则会自动读取卡序列号&#xff0c;单片机根据卡的序列号对卡进行判断。若该卡是有效卡&#xff0c…

Markdown 进阶语法:Mermaid 绘图 (一) - 流程图 (Flowchart)

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

瑞吉外卖-Day02

title: 瑞吉外卖-Day02 abbrlink: ‘1’ date: 2023-04-1 19:30:00 瑞吉外卖-Day02 课程内容 完善登录功能新增员工员工信息分页查询启用/禁用员工账号编辑员工信息 分析前端页面效果是如何实现的 为什么点击左边 右边会根着变化 [外链图片转存失败,源站可能有防盗链机制…

Neo4J 特性CQL语句,函数,Springboot集成

Neo4J Neo4J Neo4J一、Neo4J相关介绍1.为什么需要图数据库方案1&#xff1a;Google方案2&#xff1a;Facebook 2.特性和优势3.什么是Neo4j4.Neo4j数据模型图论基础属性图模型Neo4j的构建元素 5.软件安装 二、CQL语句1.CQL简介2.CREATE 命令3.MATCH 命令4.RETURN 子句5.MATCH和R…

FastDFS【FastDFS环境搭建_Linux、FastDFS指令、复习】(二)-全面详解(学习总结---从入门到深化)

目录 FastDFS环境搭建_Linux FastDFS指令 复习&#xff1a; FastDFS环境搭建_Linux 下载安装gcc 安装方式为yum安装&#xff08;需网络&#xff09;&#xff1a; yum install gcc-c perl-devel pcre-devel openssl-devel zlib-devel wget 下载安装FastDFS wget https:/…

vue3 异步组件

vue3中使用异步组件 vue3中使用异步组件可以解决两个问题&#xff1a; 1.提升性能&#xff08;类似于懒加载&#xff09; 2.分包 下载插件 npm i vueuse/core -S 1.提升性能&#xff08;懒加载&#xff09; 父组件 <template><div><h1>异步组件</h1&g…

【计算机视觉】对比学习综述(自己的一些理解)

对比loss 对比学习的 loss&#xff08;InfoNCE&#xff09;即以最 大化互信息为目标推导而来。其核心是通过计算样本表示间的距离&#xff0c;拉近正样本&#xff0c; 拉远负样本&#xff0c;因而训练得到的模型能够区分正负例。 具体做法为&#xff1a;对一个 batch 输入的图…

Matlab绘图系列教程-Matlab 34 种绘图函数示例(上)

Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化第一部分&#xff1a;入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …