Python --NumPy库基础方法(2)
NumPy
Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向量处理ndarray对象,提高程序运算速度。
本期我们接着介绍numpy中的方法:
小tips
在介绍之前,说明一个jupyter notebook界面操作方法:
一个变量不需要print打印,可以直接输出结果
比如:
import numpy as np
b = np.array([1,2,3,4,5,6])
b #直接就可以输出
------------------------------
[1 2 3 4 5 6]
一维数组索引和切片
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop及 step 参数进行,从原数组中切割出一个新数组。
#一维数组索引和切片,下标位置从0开始
x = np.arange(10) #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])x[1]
结果:1
----------------
x[2:7:2] #表示x从2-7的范围内,隔两步取一个值
结果:array([2, 4, 6])
------------------------------
x[2:] #表示从第二个位置索引开始切片
结果:array([2, 3, 4, 5, 6, 7, 8, 9])
一维数组负索引和切片的使用
x = np.arange(10)
x[-2] #负索引位置从-1开始
------------
8
二维数组的索引和切片
#二维数组的索引和切片 先索引行再索引列,精准定位切片位置。
#行、列索引都从0开始
#reshape方法改数组的形状维度x = np.arange(1,13)
a = x.reshape(3,4) #a=array([[ 1, 2, 3, 4],#[ 5, 6, 7, 8],#[ 9, 10, 11, 12]])#索引直接获取
a[1] #索引行
结果:array([5, 6, 7, 8])
-------------------------
a[1][2] #切行索引为一,列索引为2的值
结果:7
=======================================
#使用坐标获取数组a[:,1] #所有行的第二列
结果:array([ 2, 6, 10])
-------------------------------
a[2,1] #第三行第二列
结果:10
---------------------------------
a[::2,0] #在第一列,隔两步取一行
结果:array([1, 9])
----------------------------------
a[(0,2),(1,2)] #注意!!!前一个括号内的都是行坐标,第二个都是列坐标,两者一一对应
结果:array([ 2, 11])
二维数组负索引的使用
# 二维数组负索引的使用
x = np.arange(1,13)
a = x.reshape(3,4) #a=array([[ 1, 2, 3, 4],#[ 5, 6, 7, 8],#[ 9, 10, 11, 12]])a[-1] #获取最后一行
结果:array([ 9, 10, 11, 12])
----------------------------
a[::-1] #行进行倒序
结果:array([[ 9, 10, 11, 12],[ 5, 6, 7, 8],[ 1, 2, 3, 4]])
-------------------------------
a[::-1,::-1] #行列都倒序
结果:array([[12, 11, 10, 9],[ 8, 7, 6, 5],[ 4, 3, 2, 1]])
------------------------------
a[::,::-1] #列倒序
结果:array([[ 4, 3, 2, 1][ 8, 7, 6, 5],[12, 11, 10, 9]])
切片数组的复制
#切片数组的复制
#拷贝sub_array=a[:2,:2]
sub_array[0][0]=1000 #将切片位置的值强行替换了
sub_array
------------------------
array([[1000, 2],[ 5, 6]])
改变数组的维度
通过reshape方法可以将一维数组变成二维、三维或者多维数组,也可以通过reshape方法将多维数组变成一维。
#改变数组的维度#升维
a=np.arange(24) #一维数组
结果:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])
----------------------------------
b=np.arange(24).reshape(4,6) #二维数组
结果:array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])
-------------------------------------------
c=np.arange(24).reshape(2,2,6) #三维数组
c
结果:array([[[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]],[[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]]])
============================
#降维
c.reshape(-1)
--------------------
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])
ravel方法和flatten方法
通过ravel方法或flatten方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置Numpy数组的shape属性(元组类型),通过resize方法也可以改变数组的维度。
#ravel方法
np.arange(24).reshape(2,2,6).ravel()
----------------------------------------
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])
=============================================
#flattn方法
np.arange(24).reshape(2,2,6).flatten()
------------------------------------------
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])
数组的拼接
| 函数 | 描述 |
|---|---|
| concatenate | 连接沿现有轴的数组序列 |
| hstack | 水平堆叠序列中的数组(列方向) |
| vstack | 竖直堆叠序列中的数组(行方向) |
concatenate()
concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:
numpy.concatenate((a1, a2, ...), axis)
a1, a2, …:相同类型的数组
axis:沿着它连接数组的轴,默认为 0
列表的拼接
直接拼接:
#直接拼接
a=[1,2,3]
b=[4,5,6]
a.extend(b)
a
-----------------
[1, 2, 3, 4, 5, 6]
一维数组的拼接:
#一维数组的拼接
x = np.arange(1,4)
y = np.arange(4,7)
np.concatenate((x,y))
-----------------------------
array([1, 2, 3, 4, 5, 6])
二维数组的拼接
#二维数组的拼接 axis=0时,上下拼接。axis=1时,左右拼接。axis默认为0.#行方向的拼接
a=np.arange(24).reshape(4,6)
b=np.arange(18).reshape(3,6)
np.concatenate((a,b),axis=0)
---------------------------------
array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23],[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17]])
#列方向的拼接
a=np.arange(24).reshape(4,6)
b=np.arange(28).reshape(4,7)
# np.hstack((a,b))
np.concatenate((a,b),axis = 1)
-------------------------------------
array([[ 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6],[ 6, 7, 8, 9, 10, 11, 7, 8, 9, 10, 11, 12, 13],[12, 13, 14, 15, 16, 17, 14, 15, 16, 17, 18, 19, 20],[18, 19, 20, 21, 22, 23, 21, 22, 23, 24, 25, 26, 27]])
数组的转置
将行与列对调,即第一行变成第一列…或第一列变成第一行…的操作即是转置操作。
transpose进行转换
#数组的转置 将行与列对调
#transpose()进行转置a=np.arange(1,13).reshape(2,6)
a
--------------------
array([[ 1, 2, 3, 4, 5, 6],[ 7, 8, 9, 10, 11, 12]])
二维转置
a.transpose()和a.T两种方法都可以转置
#二维转置
a.transpose()
------------------
array([[ 1, 7],[ 2, 8],[ 3, 9],[ 4, 10],[ 5, 11],[ 6, 12]])
或者:
b=np.arange(2,14).reshape(2,6)
b.T
-----------------
array([[ 2, 8],[ 3, 9],[ 4, 10],[ 5, 11],[ 6, 12],[ 7, 13]])
数组的分隔
split分隔
numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:
numpy.split(ary, indices_or_sections, axis)
ary:被分割的数组
indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分
#数组分隔
#格式:split()分隔------>numpy.split(ary,indices_or_sections,axis)x = np.arange(1,9)
x
结果:array([1, 2, 3, 4, 5, 6, 7, 8])
----------------------------------------
a = np.split(x,4)
a
结果:[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
传递数组进行分隔
x = np.arange(1,9)
b = np.split(x,[2,4]) #以传递的数组中,在第2个索引位置和第4个索引位置的前面分隔
b
[array([1, 2]), array([3, 4]), array([5, 6, 7, 8])]
水平分隔
使用hsplit函数可以水平分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示要将数组水平分隔成几个小数组。
#水平分隔:左右分隔
a = np.arange(24).reshape(4,6)
np.hsplit(a,2) #分隔a数组,分成两份
--------------------
[array([[ 0, 1, 2],[ 6, 7, 8],[12, 13, 14],[18, 19, 20]]),array([[ 3, 4, 5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23]])]
垂直分割
使用vsplit函数可以垂直分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示将数组垂直分隔成几个小数组。
#垂直分隔:上下分隔np.vsplit(a,2)
-------------------------------------
[array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]]),array([[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])]
总结
本篇介绍了一部分Numpy库中的方法,Numpy库很大很丰富,务必整理牢记,对接下来的学习很重要。
加强整理,要动手敲哇。
还有部分方法下期介绍哦~(常用的就剩一点咯)。
相关文章:
Python --NumPy库基础方法(2)
NumPy Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向…...
音视频入门基础:H.264专题(15)——FFmpeg源码中通过SPS属性获取视频帧率的实现
音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...
【C++高阶】哈希之美:探索位图与布隆过滤器的应用之旅
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:模拟实现unordered 的奥秘 🌹🌹期待您的关注 🌹🌹 ❀哈希应用 Ǵ…...
文件包涵条件竞争(ctfshow82)
Web82 利用 session.upload_progress 包含文件漏洞 <!DOCTYPE html> <html> <body> <form action"https://09558c1b-9569-4abd-bf78-86c4a6cb6608.challenge.ctf.show//" method"POST" enctype"multipart/form-data"> …...
通信原理-思科实验三:无线局域网实验
实验三 无线局域网实验 一:无线局域网基础服务集 实验步骤: 进入物理工作区,导航选择 城市家园; 选择设备 AP0,并分别选择Laptop0、Laptop1放在APO范围外区域 修改笔记本的网卡,从以太网卡切换到无线网卡WPC300N 切…...
*算法训练(leetcode)第三十一天 | 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
刷题记录 *1049. 最后一块石头的重量 II*494. 目标和474. 一和零 *1049. 最后一块石头的重量 II leetcode题目地址 本题与分割等和子集类似,要达到碰撞最后的石头重量最小,则尽可能把石头等分为两堆。 时间复杂度: O ( m ∗ n ) O(m * n)…...
mac中如何使用obs推流以及使用vlc播放
使用obs推流 1.打开obs,在“来源”框中->点加号->选择媒体源->选择本地ts文件 2.obs中->点击右下角设置->点直播->服务选自定义->服务器填写你的srt服务url,比如:srt://192.168.13.211:14000?modecaller 注意ÿ…...
shopee虾皮 java后端 一面面经 整体感觉不难
面试总结:总体不难,算法题脑抽了只过了一半,面试官点出了问题说时间到了,反问一点点,感觉五五开,许愿一个二面 1.Java中的锁机制,什么是可重入锁 Java中的机制主要包括 synchronized关键字 Loc…...
HydraRPC: RPC in the CXL Era——论文阅读
ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用(RPC)是分布式系统中的一项基本技术,它允许函数在远程服务器上通过本地调用执行来促进网络通信,隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…...
pve笔记
配置显卡直通参考 https://blog.csdn.net/m0_59148723/article/details/130923893 https://foxi.buduanwang.vip/virtualization/pve/561.html/ https://www.cnblogs.com/MAENESA/p/18005241 https://www.wangsansan.com/archives/181/ pve配置显卡直通到虚拟机后,…...
typecho仿某度响应式主题Xaink
新闻类型博客主题,简洁好看,适合资讯类、快讯类、新闻类博客建站,响应式设计,支持明亮和黑暗模式 直接下载 zip 源码->解压后移动到 Typecho 主题目录->改名为xaink->启用。 演示图: 下载链接: t…...
springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step
springcloud RocketMQ ,一个mq消息发送后,客户端是怎么一步步拿到消息去消费的?我们要从代码层面探究这个问题。 找的流程图,有待考究。 以下我们开始debug: 拉取数据的线程: PullMessageService.java 本…...
GPT-4o mini小型模型具备卓越的文本智能和多模态推理能力
GPT-4o mini 是首个应用OpenAI 指令层次结构方法的模型,这有助于增强模型抵抗越狱、提示注入和系统提示提取的能力。这使得模型的响应更加可靠,并有助于在大规模应用中更安全地使用。 GPT-4o mini 在学术基准测试中,无论是在文本智能还是多模…...
Milvus 向量数据库进阶系列丨部署形态选型
本系列文章介绍 在和社区小伙伴们交流的过程中,我们发现大家最关心的问题从来不是某个具体的功能如何使用,而是面对一个具体的实战场景时,如何选择合适的向量数据库解决方案或最优的功能组合。在 “Milvus 向量数据库进阶” 这个系列文章中&…...
【React】详解受控表单绑定
文章目录 一、受控组件的基本概念1. 什么是受控组件?2. 受控组件的优势3. 基本示例导入和初始化定义函数组件处理输入变化处理表单提交渲染表单导出组件 二、受控组件的进阶用法1. 多个输入框的处理使用多个状态变量使用一个对象管理状态 2. 处理选择框(…...
使用puma部署ruby on rails的记录
之前写过一篇《记录一下我的Ruby On Rails的systemd服务脚本》的记录,现在补上一个比较政治正确的Ruby On Rails的生产环境部署记录。使用Puma部署项目。 创建文件 /usr/lib/systemd/system/puma.service [Unit] DescriptionPuma HTTP Server DocumentationRuby O…...
如何在Linux上使用Ansible自动化部署
Ansible是一个开源的自动化工具,可以帮助开发人员和系统管理员对大规模的服务器进行自动化部署和管理。它使用SSH协议来在远程服务器上执行任务,并通过模块化的方式提供了丰富的功能,可以轻松地管理服务器配置、软件部署和应用程序运行。 在…...
scrapy爬取城市天气数据
scrapy爬取城市天气数据 一、创建scrapy项目二、修改settings,设置UA,开启管道三、编写爬虫文件四、编写items.py五、在weather.py中导入WeatherSpiderItem类六、管道中存入数据,保存至csv文件七、完整代码一、创建scrapy项目 先来看一下爬取的字段情况: 本次爬取城市天…...
一天搞定React(5)——ReactRouter(下)【已完结】
Hello!大家好,今天带来的是React前端JS库的学习,课程来自黑马的往期课程,具体连接地址我也没有找到,大家可以广搜巡查一下,但是总体来说,这套课程教学质量非常高,每个知识点都有一个…...
微信小程序之计算器
在日常生活中,计算器是人们广泛使用的工具,可以帮助我们快速且方便地计算金额、成本、利润等。下面将会讲解如何开发一个“计算器”微信小程序。 一、开发思路 1、界面和功能 “计算器”微信小程序的页面效果如图所示 在计算器中可以进行整数和小数的…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
