Numpy 数组切片

news2024/11/16 22:24:35

一、列表切片(一维数组)

1.1、切片原理

列表切片是从原始列表中提取列表的一部分的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。

规则:

存储对象[start : end : step] 

start : 起始索引,从0开始,-1表示结束
end:结束索引,不包含
step:步长;步长为正时,从左向右取值。步长为负时,反向取值

在这里插入图片描述

1.2、切片使用

1.2.1、获取列表中的元素

>>> l1 = [3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1
[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> midd_num=int(len(l1)/2)
>>> midd_num
5
>>> l1[midd_num:]      # 获取下标 5 及其之后的数据
[15, 17, 20, 23, 25]
>>> l1[:midd_num]      # 获取下标 5 之前的数据
[3, 5, 7, 10, 13]
>>> l1[-1]             # 获取列表最后一个数据
25
>>> l1[-2]             # 获取列表逆序第二个数据
23
>>> l1[-2:]            # 获取列表逆序后两个数据
[23, 25]
>>> l1[2:8]            # 获取列表3-8d的数据
[7, 10, 13, 15, 17, 20]
>>> l1[::2]            # 获取整个列表且步长为2
[3, 7, 13, 17, 23]
>>> l1[1::2]           # 从第二个开始获取整个列表且步长为2
[5, 10, 15, 20, 25]
>>> l1[0:90:2]         # !!!不存在越界问题,体现了健壮性
[3, 7, 13, 17, 23]     

1.2.2、列表逆序

通过设置步长为 -1实现,如下:

>>> l1[::-1]
[25, 23, 20, 17, 15, 13, 10, 7, 5, 3]

1.2.3、修改列表元素

切片赋值的办法实现,如下:

>>> l1
[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[0:1]
[3]
>>> l1[0:1]=["hello"]
>>> l1
['hello', 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[1:2]
[5]
>>> l1[1:2]="world"    # 注意赋值类型需要为列表
>>> l1
['hello', 'w', 'o', 'r', 'l', 'd', 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[0:2]
[3, 5]
>>> l1[0:2]=["hello", "world"]   # 同时修改多个数据
>>> l1
['hello', 'world', 7, 10, 13, 15, 17, 20, 23, 25]

1.2.4、插入新元素

在空白处插入,如下:

>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[:0]=["nihao"]
>>> l1
['nihao', 3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[:1]=["nihao","shijie"]   # 会替换掉 '3'
>>> l1
['nihao', 'shijie', 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[:1]
[3]
>>> l1[:0]=["nihao","shijie"]  # 插入多个
>>> l1
['nihao', 'shijie', 3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[5]
15
>>> l1[5:5]=["nihao", "shijie"]
>>> l1
[3, 5, 7, 10, 13, 'nihao', 'shijie', 15, 17, 20, 23, 25]

1.2.5、删除元素

给列表某个值赋空值,如下:

>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[:3]
[3, 5, 7]
>>> l1[:3]=[]
>>> l1
[10, 13, 15, 17, 20, 23, 25]

>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l1[:3]
[3, 5, 7]
>>> del(l1[:3])    # 同样可以实现上面结果
>>> l1
[10, 13, 15, 17, 20, 23, 25]

1.2.6、复制元素(浅拷贝)

>>> l1=[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l2=l1[:]
>>> l2
[3, 5, 7, 10, 13, 15, 17, 20, 23, 25]
>>> l2 is l1
False
>>> l2=l1
>>> l2 is l1
True
>>> import copy
>>> l2=copy.copy(l1)       # 浅拷贝
>>> l2 is l1
False
>>> l2=copy.deepcopy(l1)   # 深拷贝
>>> l2 is l1
False

二、多维数组切片

多为数组的切片操作与一维数组一致,不同维度上的操作使用’,'隔开就好

2.1、认识数组的维度

arr.ndim

>>> ar1=np.arange(12).reshape((4, 3))
>>> ar1
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
>>> ar1.ndim
2
>>> ar1=np.arange(27).reshape((3,3,3))
>>> ar1
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],
        [24, 25, 26]]])

>>> ar1.ndim
3
>>> ar1[:]        # 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],
        [24, 25, 26]]])
>>> ar1[:,0]     # 获取每维数组的第一行
array([[ 0,  1,  2],
       [ 9, 10, 11],
       [18, 19, 20]])
>>> ar1[:,0,0]   # 获取每维数组的第一行的第一个元素
array([ 0,  9, 18])

# 认识数组的维度可以查看ar1.ndim ,也可以查看数组的'['层数

2.2、多维数组切片使用

2.2.1、获取列表中的元素

>>> ar1=np.arange(27).reshape((3,3,3))
>>> ar1
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],
        [24, 25, 26]]])
>>> ar1[0]       # 获取数组的0维
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> ar1[1]       # 获取数组的1维
array([[ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17]])
>>> ar1[2]       # 获取数组的2维
array([[18, 19, 20],
       [21, 22, 23],
       [24, 25, 26]])
>>> ar1[0,0]
array([0, 1, 2])
>>> ar1[0,0,1]
1
>>> ar1[1,2,1]
16
>>> ar1[1,0,0:2]
array([ 9, 10])
>>> ar1[1,0,-2]
10
>>> ar1[1,0,-2:]
array([10, 11])

2.2.2、数组逆序

>>> ar1=np.arange(27).reshape((3,3,3))
>>> ar1
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],
        [24, 25, 26]]])
>>> ar1[1,0,::-1]       # 第2维逆序 
array([11, 10,  9])
>>> ar1[1,::-1]         # 第1 维逆序
array([[15, 16, 17],
       [12, 13, 14],
       [ 9, 10, 11]])
>>> ar1[::-1]           # 整个数组逆序
array([[[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]]])
>>> ar1[::-1,::-1]    # 第0、1维逆序
array([[[24, 25, 26],
        [21, 22, 23],
        [18, 19, 20]],

       [[15, 16, 17],
        [12, 13, 14],
        [ 9, 10, 11]],

       [[ 6,  7,  8],
        [ 3,  4,  5],
        [ 0,  1,  2]]])
>>> ar1[::-1,::-1,::-1]  # 第0、1和2维逆序
array([[[26, 25, 24],
        [23, 22, 21],
        [20, 19, 18]],

       [[17, 16, 15],
        [14, 13, 12],
        [11, 10,  9]],

       [[ 8,  7,  6],
        [ 5,  4,  3],
        [ 2,  1,  0]]])
>>> ar1[1,:,:]
array([[ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17]])
>>> ar1[1,...]     # 对于大于等于三维的数组,可以使用...来简化操作
array([[ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17]])

2.2.3、修改列表元素

>>> ar1[0,0,1]=999
>>> ar1
array([[[  0, 999,   2],
        [  3,   4,   5],
        [  6,   7,   8]],

       [[  9,  10,  11],
        [ 12,  13,  14],
        [ 15,  16,  17]],

       [[ 18,  19,  20],
        [ 21,  22,  23],
        [ 24,  25,  26]]])
>>> ar1[0,1]
array([3, 4, 5])
>>> ar1[0,1]=[123, 456, 789]
>>> ar1
array([[[  0, 999,   2],
        [123, 456, 789],
        [  6,   7,   8]],

       [[  9,  10,  11],
        [ 12,  13,  14],
        [ 15,  16,  17]],

       [[ 18,  19,  20],
        [ 21,  22,  23],
        [ 24,  25,  26]]])

2.2.4、插入新元素

多维数组空白处插入数据不生效
>>> ar1[0,0,:0]=[58]
>>> ar1[0,0]
array([0, 1, 2])
>>> ar1
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],
        [24, 25, 26]]])

2.2.5、删除元素

多维数组无法直接删除,报错如下:

>>> ar1[0,1,2]=[]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.

2.2.6、复制元素(浅拷贝)

>>> ar1
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],
        [24, 25, 26]]])
>>> ar3=ar1[:]
>>> ar3
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],
        [24, 25, 26]]])
>>> ar3 is ar1
False
>>> ar3=ar1
>>> ar3 is ar1
True
>>> import copy
>>> ar3=copy.copy(ar1)
>>> ar3
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],
        [24, 25, 26]]])
>>> ar3 is ar1
False
>>> ar3=copy.deepcopy(ar1)
>>> ar3
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],
        [24, 25, 26]]])
>>> ar3 is ar1
False

三、参考文档

1、https://blog.csdn.net/hlx20080808/article/details/127610664

2、http://coolpython.net/data_analysis/numpy/numpy-del-item.html

3、https://www.bbsmax.com/A/gAJGw4g1JZ/

4、https://blog.csdn.net/weixin_36670529/article/details/111307004

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

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

相关文章

【论文阅读】Online Decision Based Visual Tracking via Reinforcement Learning

Online Decision Based Visual Tracking via Reinforcement Learning 概述 本文2020年发布于NeurIPS(CCF-A)。视觉跟踪通常基于目标检测或者模板区配&#xff0c;但它们都只适用于特定的场景或对象。因为它们遵循不同的跟踪原则&#xff0c;直接将它们融合在一起是不明智的。…

会话技术和JSP技术

会话技术&#xff1a;一次会话中包含多次的请求和响应 一次会话&#xff1a;浏览器第一次给服务器资源发送请求&#xff0c;会话建立&#xff0c;直到有一方断开为止 功能&#xff1a;在一次会话的范围内共享数据 方式&#xff1a; 1、客户端会话技术&#xff1a;Cookie 2、服务…

我司赤城弘一CEO受邀参加东盟与中日韩中小企业人工智能产业论坛并做主旨发言。

我司赤城弘一CEO受邀参加东盟与中日韩中小企业人工智能产业论坛并做主旨发言。 一、活动背景 为推动东盟与中日韩&#xff08;103&#xff09;中小企业服务联盟务实合作&#xff0c;帮助中小企业提高生产力和技术创新能力&#xff0c;进一步提高国际化发展水平&#xff0c;促进…

Web前端期末大作业---新农村建设网页设计

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&#xff01;☀️ &#x1f525;前言 期末来咯&#xff0c…

Unity脚本(一)

视频教程&#xff1a;https://www.bilibili.com/video/BV12s411g7gU/?p112 目录 脚本 特性 控制台Console 脚本生命周期 Assembly-CSharp.dll 调试 Component 脚本 脚本是附加在游戏物体上用于定义游戏对象行为指令的代码&#xff0c;需要继承自MonoBehaviour类 编…

使用VTK和Python进行体绘制

使用VTK和Python进行体绘制IntroductionVolume Rendering1. Imports2. Helper-functions3.Options4. Image-Data Input5. Prep-work6. Volume RenderingIntroduction 科学可视化技术是运用计算机图形学、图像处理、计算机视觉等方法&#xff0c;将科学、工程学、医学等计算、测…

亚马逊跨境电商可靠吗?2023年还可以做吗?

新的一年新的打算&#xff0c;不少小伙伴在问&#xff0c;亚马逊跨境电商可靠吗&#xff1f;2023年还可以做亚马逊跨境电商吗&#xff1f;为此我们小编就来简单说说自己的想法吧&#xff01; 亚马逊跨境电商可靠吗&#xff1f; 【回答】&#xff1a;首先我们需要肯定一点的是&…

【Unity3D日常开发】Unity3D中屏蔽不想显示的黄色警告消息

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群&#xff1a;1040082875 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;会有一些脚本…

在vue项目中使用rem的完整步骤

首先要知道几个概念&#xff1a; 设计稿是物理像素&#xff0c;在移动端上是css像素&#xff0c;1css像素2物理像素/3物理像素&#xff1b; 要想实现一张设计稿的尺寸能在各个移动端上适配&#xff0c;因为不同的移动端的css像素和物理像素比不一样&#xff0c;所以固定的物理…

【前端】Vue项目:旅游App-(1)搭建项目、重置css、配置router和store(pinia)

文章目录创建项目搭建和配置项目&#xff1a;项目目录结构划分重置CSSnormalize.cssreset.css目录结构配置router对应页面组件index.js配置store创建项目 npm init vuelatest本项目相关选择&#xff1a; 安装相关依赖&#xff1a; npm install试着跑一下&#xff1a; npm ru…

提面录取占比:浙大MBA MPA MEM复试中不可忽视的关键因素之一。

对于复试考生来说&#xff0c;单纯的探讨某个专业有多少人报考没有太大意义&#xff0c;单纯的关注这个专业招多少人也没有太多意义&#xff0c;我们要更加关注在复试阶段还能剩余多少录取指标&#xff0c;因为这个才是复试考生直接相关的数据。不同项目和专业间目前对提前批面…

剖析免密登录,集群之间的免密登录

免密登录1.免密登录的原理2.实现2.1首先配置每个节点的hosts文件2.2 在server1生成秘钥2.3了解文件2.4 实验是否可行3.补充1.免密登录的原理 每台主机authorized_keys文件&#xff0c;该文件就是身份验证的钥匙&#xff0c;该文件里如果有另一台主机的公钥&#xff08;id_rsa.…

Pytest自动化测试框架之Allure报告

目录 简介 部署使用 1、安装&#xff1a; 2、基本使用 测试报告 简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容&#xff0c; 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有…

Android设计模式详解之享元模式

前言 享元模式是对象池的一种实现&#xff0c;用来尽可能减少内存使用量&#xff0c;适合用于可能存在大量重复对象的场景&#xff0c;来缓存可共享的对象&#xff1b; 定义&#xff1a;使用共享对象可有效地支持大量的细粒度的对象&#xff1b; 使用场景&#xff1a; 系统…

STM32/51单片机实训day7——电机驱动|ULN2003A步进电机|Proteus电路设计|旋转角度控制函数|驱动函数|Keil5程序设计

目录 1 ULN2003A步进电机简介 2 步进电机电路设计 3 旋转角度控制函数 4 程序设计 motor.c motor.h 前期LCD参考文章&#xff1a;​​​​​​​ 内 容&#xff1a;编程实现控制步进电机旋转不同角度 学 时&#xff1a;3学时 知识点&#xff1a; GPIO配置、步进电机…

【pygame学习_5】窗口设计

1、引言 窗体是游戏的交互界面&#xff0c;一般我们会遇到窗口大小可调&#xff0c;窗口无边框&#xff0c;全屏显示&#xff0c;最小化设计&#xff0c;改名字&#xff0c;换图标等设计需求。 屏幕绘制有如下重要函数&#xff1a; 2、屏幕模式函数 pygame.display.set.mode …

Event Loop

javascript是单线程语言 那么&#xff0c;你可能要问&#xff0c;javascript为什么是单线程&#xff0c;难道不能实现多线程吗&#xff1f; 这跟历史有关系。javascript从诞生的时候就是单线程&#xff0c;原因大概是不想让浏览器变得太复杂&#xff0c;因为多线程需要共享资源…

dark room - 2020 年苹果设计奖得主,一个足够强大的照片视频编辑器

dark room - 2020 年苹果设计奖得主&#xff0c;一个足够强大的照片视频编辑器 2020年苹果设计奖得主 2015年App Store最佳应用 Darkroom 是一个高级照片和视频编辑器。它对业余摄影师来说很容易操作&#xff0c;但对专业摄影师来说足够强大。 下载 ➤ Darkroom 下载安装 ⇲…

七十二——八十八

七十二、JavaScript——面向对象简介 面向对象编程&#xff08;OOP) 1. 程序是干嘛的 - 程序是现实世界的抽象&#xff08;照片就是对人的抽象&#xff09; 2. 对象是干嘛的&#xff1f; - 一个事物抽象到程序后就变成了对象 - 在程序的试接中&#xff0c;一切皆对象 - 一个事物…

来到CSDN一周年(hacker的2022年终总结)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山&#xff0c;那样的人生才是我想要的…