当前位置: 首页 > news >正文

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

相关文章:

Python 学习之NumPy(一)

文章目录 1.为什么要学习NumPy2.NumPy的数组变换以及索引访问3.NumPy筛选使用介绍筛选出上面nb数组中能被3整除的所有数筛选出数组中小于9的所有数提取出数组中所有的奇数数组中所有的奇数替换为-1二维数组交换2列生成数值5—10&#xff0c;shape 为(3,5)的二维随机浮点数 NumP…...

Nftables栈溢出漏洞(CVE-2022-1015)复现

背景介绍 Nftables Nftables 是一个基于内核的包过滤框架&#xff0c;用于 Linux 操作系统中的网络安全和防火墙功能。nftables 的设计目标是提供一种更简单、更灵活和更高效的方式来管理网络数据包的流量。 钩子点&#xff08;Hook Point&#xff09; 钩子点的作用是拦截数…...

【C++】 Qt-事件(上)(事件、重写事件、事件分发)

文章目录 事件重写事件事件分发 事件 事件&#xff08;event&#xff09;是由系统或Qt本身在不同的时刻发出的。比如&#xff0c;当用户按下鼠标&#xff0c;敲下键盘&#xff0c;或窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件是在对用户操作做出响应…...

k8s部署springboot

前言 首先以SpringBoot应用为例介绍一下k8s的部署步骤。 1.从代码仓库下载代码&#xff0c;比如GitLab&#xff1b; 2.接着是进行打包&#xff0c;比如使用Maven&#xff1b; 3.编写Dockerfile文件&#xff0c;把步骤2产生的包制作成镜像&#xff1b; 4.上传步骤3的镜像到远程…...

备战秋招002(20230704)

文章目录 前言一、今天学习了什么&#xff1f;二、关于问题的答案1.线程池2.synchronized关键字3、volatile 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. …...

游泳买耳机买什么的比较好,列举几款实战性好的游泳耳机

对于运动用户来说&#xff0c;在运动时都会选择听一些节奏感比较强的音乐&#xff0c;让自己运动是更有活力。现在已经是三伏天中的前伏期间&#xff0c;不少人会选择在三伏天的日子里进行减肥瘦身&#xff0c;耳游泳已经成为很多人都首选运动&#xff0c;游泳是非常好的有氧运…...

【无线传感器】使用 MATLAB和 XBee连续监控温度传感器无线网络研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Java基础-多线程JUC-生产者和消费者

1. 生产者与消费者 实现线程轮流交替执行的结果&#xff1b; 实现线程休眠和唤醒均要使用到锁对象&#xff1b; 修改标注位&#xff08;foodFlag&#xff09;&#xff1b; 代码实现&#xff1a; public class demo11 {public static void main(String[] args) {/*** 需求&#…...

day2 QT按钮与容器

目录 按钮 1、QPushButton 2、QToolButton 3、QRadioButton 4、QCheckBox 示例 容器 ​编辑 1. QGroupBox&#xff08;分组框&#xff09; 2. QScrollArea&#xff08;滚动区域&#xff09; 3. QToolBox&#xff08;工具箱&#xff09; 4. QTabWidget&#xff08;选…...

JPA 批量插入较大数据 解决性能慢问题

JPA 批量插入较大数据 解决性能慢问题 使用jpa saveAll接口的话需要了解原理&#xff1a; TransactionalOverridepublic <S extends T> List<S> saveAll(Iterable<S> entities) {Assert.notNull(entities, "Entities must not be null!");List<…...

为啥离不了 linux

Linux与Windows都是十分常见的电脑操作系统&#xff0c;相信你对它们二者都有所了解&#xff01;在你的使用过程中&#xff0c;是否有什么事让你觉得在Linux上顺理成章&#xff0c;换到Windows上就令你费解&#xff1f;亦或者关于这二者你有任何想要分享的&#xff0c;都可以在…...

基于分形的置乱算法和基于混沌系统的置乱算法哪种更安全?

在信息安全领域中&#xff0c;置乱算法是一种重要的加密手段&#xff0c;它可以将明文进行混淆和打乱&#xff0c;从而实现保密性和安全性。常见的置乱算法包括基于分形的置乱算法和基于混沌系统的置乱算法。下面将从理论和实践两方面&#xff0c;对这两种置乱算法进行比较和分…...

pve使用cloud-image创建ubuntu模板

首先连接pve主机的终端 下载ubuntu22.04的cloud-image镜像 wget -P /opt https://mirrors.cloud.tencent.com/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64.img创建虚拟机&#xff0c;id设为9000&#xff0c;使用VirtIO SCSI控制器 qm create 9000 -core…...

shiro入门

1、概述 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。借助 Shiro 您可以快速轻松地保护任何应用程序一一从最小的移动应用程序到最大的 Web 和企业应用程序。 作用&#xff1a;Shiro可以帮我们完成 &#xff1a;认证、授权、加密、会话管理、与 Web 集成、…...

开源 sysgrok — 用于分析、理解和优化系统的人工智能助手

作者&#xff1a;Sean Heelan 在这篇文章中&#xff0c;我将介绍 sysgrok&#xff0c;这是一个研究原型&#xff0c;我们正在研究大型语言模型 (LLM)&#xff08;例如 OpenAI 的 GPT 模型&#xff09;如何应用于性能优化、根本原因分析和系统工程领域的问题。 你可以在 GitHub …...

Gitlab保护分支与合并请求

目录 引言 1、成员角色指定 1、保护分支设置 2、合并请求 引言 熟悉了Git工作流之后&#xff0c;有几个重要的分支&#xff0c;如Master(改名为Main)、Develop、Release分支等&#xff0c;是禁止开发成员随意合并和提交的&#xff0c;在此分支上的提交和推送权限仅限项目负责…...

ad18学习笔记九:输出文件

一般来说提供给板卡厂的文件里要包括以下这些文件 1、装配图 2、bom文件 3、gerber文件 4、转孔文件 5、坐标文件 6、ipc网表 AD_PCB&#xff1a;Gerber等各类文件的输出 - 哔哩哔哩 原点|钻孔_硬件设计AD 生成 Gerber 文件 1、装配图 如何输出装配图&#xff1f; 【…...

PostgreSQL 内存配置 与 MemoryContext 的生命周期

PostgreSQL 内存配置与MemoryContext的生命周期 PG/GP 内存配置 数据库可用的内存 gp_vmem 整个 GP 数据库可用的内存 gp_vmem&#xff1a; >>> RAM 128 * GB >>> gp_vmem ((SWAP RAM) - (7.5*GB 0.05 * RAM)) / 1.7 >>> print(gp_vmem / G…...

vue3 组件间通信的方式(setup语法糖写法)

vue3 组件间通信的方式(setup语法糖写法) 1. Props方式 该方式用于父传子&#xff0c;父组件以数据绑定的形式声明要传递的数据&#xff0c;子组件通过defineProps()方法创建props对象&#xff0c;即可拿到父组件传来的数据。 // 父组件 <template><div><son…...

【Cache】Rsync远程同步

文章目录 一、rsync 概念二、rysnc 服务器部署1. 环境配置2. rysnc 同步源服务器2.1 安装 rsync2.2 建立 rsyncd.conf 配置文件2.3 创建数据文件&#xff08;账号密码&#xff09;2.4 启动服务2.5 数据配置 3. rysnc 客户端3.1 设置同步方法一方法二 3.2 免交互设置 4. rysnc 认…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...