Python 学习之NumPy(一)

news2024/11/18 5:42:52

文章目录

  • 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()函数更具有可读性

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

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

相关文章

对一大厂游戏测试员的访谈实录,带你了解游戏测试

今天采访了一个在游戏行业做测试的同学&#xff0c;他所在的游戏公司是做大型多人在线角色扮演类的游戏&#xff0c;类似传奇游戏。他所在的公司目前有1200多人&#xff0c;是上市公司&#xff0c;目前游戏产品在国内海外都有市场。 因为我是一个对游戏无感的人&#xff0c;所…

【C++ 程序设计】第 7 章:输入/输出流

目录 一、流类简介 二、标准流对象 三、控制I/O格式 &#xff08;1&#xff09;流操纵符 &#xff08;2&#xff09;标志字 四、调用cout的成员函数【示例一】 五、调用 cin 的成员函数 &#xff08;1&#xff09;get() 函数 &#xff08;2&#xff09;getline()…

高考选什么专业好?适合考公务员的10大热门专业,了解一下!

高考是人生的分水岭&#xff0c;它是青春和未来的交汇处。高考成绩的优劣将对考生未来的发展产生深远的影响。作为学生们人生中重要的一站&#xff0c;高考不仅考验着学生的学业能力&#xff0c;也考验着他们的心理素质和思维能力。 高考结束后&#xff0c;众多考生面临的一个重…

FFmpeg视频转码参数详解

1 固定码率因子crf&#xff08;Constant Rate Factor&#xff09; 固定码率因子&#xff08;CRF&#xff09;是 x264 和 x265 编码器的默认质量&#xff08;和码率控制&#xff09;设置。取值范围是 0 到 51&#xff0c;这其中越低的值&#xff0c;结果质量越好&#xff0c;同…

阿里云docker启动xxljob,部署自己的定时任务

本次安装版本xxl-job-admin:2.3.0 一&#xff1a;创建xxl-job数据库的各种表 作者官方地址 下载sql执行 二&#xff1a;docker拉取xxl-job镜像 docker pull xuxueli/xxl-job-admin:2.3.0 三&#xff1a;docker启动xxl-job服务 docker run -e PARAMS"--spring.datasour…

用C语言实现经典游戏——贪吃蛇

目录 1.游戏实现思想 &#xff08;1&#xff09;定义蛇对象 &#xff08;2&#xff09;食物对象 &#xff08;3&#xff09;分数&#xff1a; &#xff08;4&#xff09;初始化蛇 &#xff08;5&#xff09;初始化食物 &#xff08;6&#xff09;修改控制台光标位置 &…

Spring Data JPA 报 HOUR_OF_DAY: 0 -> 1异常的解决过程和方案

在进行数据查询时&#xff0c;控制台报了Caused by: com.mysql.cj.exceptions.WrongArgumentException: HOUR_OF_DAY: 0 -> 1异常&#xff0c;查询得知&#xff1a;这是由于查mysql库&#xff0c;转换类型为datetime类型的字段引起的。 网上的解决方案有多种&#xff0c;大…

坐标系转换QGIS插件GeoHey

最近要将面要素&#xff08;GCJ02火星坐标系&#xff09;转WGS84&#xff0c;用程序转太麻烦了&#xff0c;找了半天没找到合适的。 插件非常好用&#xff01;&#xff01;&#xff01; 在QGIS中&#xff0c;由极海&#xff08;GeoHey&#xff09;团队提供GeoHey Toolbox插件…

Linux_清理docker容器的log

最近发现服务器硬盘空间满了&#xff0c;就排查了一番&#xff0c;发现有docker容器的log文件占用太多&#xff0c;所以要做一下清理。 首先是要找到docker容器log文件的储存位置。 1、首先在执行了一下 df -Th 命令&#xff0c;发现根目录满了。 2、然后去到根目录下&#xff…

Android项目中接入 Lint代码规范

一、概述 Android Studio 提供了一个名为 Lint 的代码扫描工具,可帮助开发者发现并更正代码结构质量方面的问题,并且无需您实际执行应用,也不必编写测试用例。系统会报告该工具检测到的每个问题并提供问题的描述消息和严重级别,以便开发者可以快速确定需要优先进行的关键改…

Linux下vim的常见命令操作(快速复查)

目录 前言1、Vim常用操作1.1、环境参数1.2、方向1.3、插入命令1.4、定位命令1.5、删除命令1.6、复制和剪切命令1.7、替换和取消命令1.8、搜索和搜索替换命令1.9、保存和退出命令1.10、其他命令1.11、可视模式 前言 本篇文章不面向新手&#xff0c;全文几乎都是命令&#xff0c;…

【Redis】多级缓存之缓存数据同步策略与Canal

目录 一、数据同步策略 1.设置有效期 2.同步双写 3.异步通知 二、Canal 三、监听Canal 一、数据同步策略 缓存数据同步的常见方式有三种&#xff1a; 1.设置有效期 给缓存设置有效期&#xff0c;到期后自动删除。再次查询时更新&#xff0c;他简单、方便&#xff0c;但…

H5学习 (一)--创建工程

文章目录 一、下载安装VS Code二、创建新文件1. 使用cmd N&#xff0c;创建一个文件2. 点击 Select a language&#xff0c;改变文件的编码类型3. 选择HTML 语言模式4. 输入 !按回车键&#xff0c;就会自动生成一个HTML模版5. 右击项目&#xff0c;选择 “Open In Default Bro…

交叉熵、Focal Loss以及其Pytorch实现

交叉熵、Focal Loss以及其Pytorch实现 本文参考链接&#xff1a;https://towardsdatascience.com/focal-loss-a-better-alternative-for-cross-entropy-1d073d92d075 文章目录 交叉熵、Focal Loss以及其Pytorch实现一、交叉熵二、Focal loss三、Pytorch1.[交叉熵](https://pyto…

浅谈商业智能BI的过去、现在和未来

互联网的大发展也在引领各行各业的改变&#xff0c;包括商业智能BI&#xff0c;商业智能BI就是在数字化时代下飞速发展的。商业智能BI与互联网发展的同时&#xff0c;人工智能、大数据、区块链、云计算等新一代信息化、数字化技术也开始进行加速商业智能BI发展及应用&#xff0…

vmareWorkstation-提取vmdk-文件系统

参考博文-CSDN-BugM&#xff08;作者&#xff09;-将vmdk作为硬盘挂载到另一个linux系统的虚拟机上 一、以管理员身份运行wmware-workstation 二、将目的vmdk文件映射到一个linux虚拟机上 选择左下方的添加按钮 添加的文件的路径可以查看需要添加的虚拟机的情况&#xff0c;如…

PXE批量网络装机、PXE无人值守安装

目录 一、批量部署的优点 二、基本部署过程 三、部署pxe网络体系要求 四、搭建PXE远程安装服务器的步骤 1.安装并启用TFTP服务 2.安装并启用dhcp服务 3.准备linux内核、初始化镜像文件 4.准备PXE引导程序 5.安装FTP服务&#xff0c;准备CentOS7安装源 6.配置启动菜单文…

ATA-3090功率放大器在新能源汽车上的应用

随着全球对环境保护和节能减排的重视&#xff0c;新能源汽车正逐渐成为汽车市场的主流。而功率放大器作为电子控制系统中的关键部件之一&#xff0c;也扮演着越来越重要的角色。那么&#xff0c;功率放大器在新能源汽车上的应用有哪些呢&#xff1f; 图&#xff1a;新能源汽车 …

数字IC前端学习笔记:仲裁轮询(五)

相关文章 数字IC前端学习笔记&#xff1a;LSFR&#xff08;线性反馈移位寄存器&#xff09; 数字IC前端学习笔记&#xff1a;跨时钟域信号同步 数字IC前端学习笔记&#xff1a;信号同步和边沿检测 数字IC前端学习笔记&#xff1a;锁存器Latch的综合 数字IC前端学习笔记&am…

聚焦云原生安全|安全专家揭秘如何强化容器威胁检测能力

4月15日&#xff0c;由极狐主办的“当效率遇上安全 一起开启质效升级之旅”活动顺利开展。 作为国内云原生安全领导厂商&#xff0c;安全狗受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;致力于提供云…