python:Numpy学习(二)切片合集

2023-11-16

前言:

本文根据本人自己的学习成果总结的,内容难免产生纰漏,如有错误,望各位路过大佬指出。

建议按顺序食用本文,效果更佳。

文内例子均以二维数组为例。

本文主要包含numpy.ndarray数组的多种切片方法。在阅读本文前,请思考下面的问题:

Q:假如给你一个棋盘格式方形蛋糕,怎么切都可以,但刀必须落在棋盘格线上,你有几种切法?


单行切片:

按照上面问题的思维,切片无非是横切或是竖切。简单切片类似于:切一刀,拎出一行一维数组。

c = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [3, 5, 6, 0],
              [8, 9, 5, 6]])
c1 = c[1]
print("切片多维列表中的某一行:", c1)
'''方括号内数字可随意变换'''
# 切片多维列表中的某一行: [5 6 7 8]

产生新的问题:如果我想要输出多行怎么实现?

尝试1: 如果我想输出1~3行(注意,这里行数计算从0开始),是否可以写成如下代码?

c1 = c[1, 3]
print("切片多维列表中的某几行:", c1)
# 切片多维列表中的某几行: 8

不可行,为什么?

因为方括号内两个用逗号间隔的数字分别代表行和列。当我只输入一个数字时,默认该数字为行。

单列切片:

那如果我想输出某一列呢?

使用...,(三个半角点号,加一个半角逗号)占位,后加想要输出的列数即可:

c1 = c[..., 3]
print("切片多维列表中的某一列:", c1)
'''
c = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [3, 5, 6, 0],
              [8, 9, 5, 6]])
'''
# 切片多维列表中的某一列: [4 8 0 6]

尝试2:用切片

c2 = c[1:3]
print("切片:", c2)

# 切片: [[5 6 7 8]
# [3 5 6 0]]

注:输出不包含第三行。

按照尝试1中的发散思维,我们可以尝试“切片多列”,“行列全切”

多行多列切片:

'''单切多列'''
c3 = c[..., 2:]  
print(c3)

# [[3 4]
# [7 8]
# [6 0]
# [5 6]]
'''行列全切'''
c2 = c[1:3, 1:3]
print(c2)

# [[6 7]
# [5 6]]

 产生问题:我是否可以输出某几行中的一列数字呢?

c2 = c[1:3, 1]
print(c2)

'''
c = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [3, 5, 6, 0],
              [8, 9, 5, 6]])
'''
# [6 5]

由此可知,只输出某几列中某行数字也是可以的。但可以发现,这样的输出都是连续的行列,如果我想输出连续两列中,偶数行的数组呢?

列表索引:

 有教程称之为“高级索引”,自己记忆的时候还是朴素点吧……

这里解释一下为什么可以用列表索引(和切片索引不一样,切片连续,列表不连续)。

numpy.ndarray数组的索引长这样:[行, 列]

实际上,每一行,每一列都相当于一个一维数组。(套娃套起来了)

在此基础上,我就可以进行针对行和列的切片。(如果还是不明白,具体参考列表的切片或是字符串的切片)

这就是行列都能用切片的原因。

那么为什么可以用列表索引?

回想一下列表的索引(列表是1维的),二维数组操作的基础也是一维数组。

可以理解成,数组索引——[行, 列]——在这个方括号中,逗号前面的都是行,逗号后面的都是列。如果有一个索引长这样——c4 = c[[0, 2], 3]——表示:将c数组中第3列,第0行和第2行的值,赋值给c4。

c4 = c[[0, 2], 3]
print(c4)

# [4 0]

列表索引+切片索引:

在明白了列表索引和切片索引后,这个部分就很好理解了——排列组合。

c4 = c[1:3, [1, 2]]
print(c4)

# [[6 7]
# [5 6]]

输出数组中大于某一数字的数:

听起来难,做起来很简单:

c5 = c[c > 4]
print("输出所有大于4的元素", c5)
'''生成的是一个一维列表'''
# 输出所有大于4的元素 [5 6 7 8 5 6 8 9 5 6]

日拱一卒,功不唐捐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python:Numpy学习(二)切片合集 的相关文章

随机推荐

  • java队列模拟_Java模拟队列

    用Java模拟队列的出队和进队 1 代码 Java 代码 package com stackANDqueue import java io DataInputStream import java io IOException 循环队列的入队
  • redis 十二. 分布式锁

    目录 一 分布式锁概述 二 redis 锁基础版示例 三 redis 锁进阶 Redlock 四 Redlock 分析 解决集群环境master宕机数据不一致锁不住的问题 锁的定时续期 watchdog源码分析 锁的可重入性分析 释放锁分析
  • ES6 for...in 和 for...of 的区别

    for in 和 for of的区别 遍历数组时 当给数组加上属性时 遍历对象时 总结 for of 是ES6新引入的特性 修复了 ES5 引入的 for in 的不足 关于两者之间的区别 下面列举了一些例子 遍历数组时 let arr 1
  • 5g手机怎么开5g网络

    确保您已经办理了5G套餐 且所处地区有5G网络信号 这样才能接收并使用到5G网络 以华为手机为例 打开 设置 移动网络 点击 启用5G 开关 状态栏上的信号图标就会出现一个5G图标 具体介绍如下 1 首先打开手机 设置 找到并点击 移动网络
  • 【状态估计】卡尔曼滤波器、扩展卡尔曼滤波器、双卡尔曼滤波器和平方根卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本文包括 1 标准卡尔曼滤波器 2 扩展卡
  • QT打开文件并显示文件内容

    QT打开文件并显示文件内容 功能描述 当点击一个按钮的时候 实现打开指定类型的文件 并在另一个子窗口中显示文件的内容 核心函数分析 QString QFileDialog getOpenFileName QWidget parent Q N
  • pandas、numpy对txt、xls、csv的文件读取总结

    文件读取 1 csv文件读取 import pandas as pd df1 pd read csv r data HeightWeight csv print df1 import numpy as np data np loadtxt
  • 华为OD机试 - 新员工座位(Java)

    题目描述 工位由序列F1 F2 Fn组成 Fi值为0 1或2 其中0代表空置 1代表有人 2代表障碍物 1 某一空位的友好度为左右连续老员工数之和 2 为方便新员工学习求助 优先安排友好度高的空位 给出工位序列 求所有空位中友好度的最大值
  • 详解Spring的循环依赖问题、三级缓存解决方案源码分析

    0 基础 Bean的生命周期 在Spring中 由于IOC的控制反转 创建对象不再是简单的new出来 而是交给Spring去创建 会经历一系列Bean的生命周期才创建出相应的对象 而循环依赖问题也是由Bean的生命周期过程导致的问题 因此我
  • memory order In x86 asm, ordinary loads and stores already have acquire / release semantics

    Acquire and Release Semantics Generally speaking in lock free programming there are two ways in which threads can manipu
  • 过采样对分类精度的影响有哪些

    过采样是一种在训练分类器时用来增加少数类样本数量的技术 它可以通过复制原有的少数类样本来增加样本数量 过采样可以提高分类精度 因为模型在训练中能够更好地学习少数类样本的特征 然而 过采样也可能导致过拟合 如果复制的样本数量过多 模型可能会过
  • 【华为OD机试真题】过滤组合字符串(C++&java&python)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 过滤组合字符串 题目描述 数字0 1 2 3 4 5 6 7 8 9分别关联 a z 26个
  • k8s配置StatefulSet解读

    什么是StatefulSet 直接参考原博客 k8s配置StatefulSet StatefulSet和Deployment一样 可以保证集群中运行指定个数的pod 也支持横向扩展 但每个pod都是不可互换的 无论pod被怎样调度 它们的标
  • Python学习-----无序序列1.0(字典的创建、查看、添加、修改、删除/替换)

    目录 前言 字典是什么 字典的特点 1 字典的创建 1 直接创建 2 dict 函数创建 2 字典的查询 1 get 函数 2 获取字典一组内容 3 字典键值对的添加 1 直接添加 2 setdefault 函数 4 字典的修改 updat
  • 基础回顾5

    JVM JRE JDK JVM表示java虚拟机 Java程序需要运行在虚拟机上 不同平台有自己的虚拟机 所以java可以实现跨平台运行 JRE表示java运行环境 包括java虚拟机和一些核心类库 核心类库主要是java lang包 ja
  • 准考证打印系统关闭怎么办_自考准考证错过打印时间,怎么办?

    点击上方蓝色字关注我们 后台回复 学历 1 5年快速拿正规名校学历 后台回复 优惠 2000元轻松入学升专本 后台回复 冲刺 获取自考备考冲刺模拟卷 后台回复 突击 0元抢占考前突击营名额 1 准考证一般什么时候开始打印 答 自学考试准考证
  • nginx php 错误日志,nginx、php-fpm、php 错误日志的关系

    nginx php fpm php 三者的配置文件中都有 error log 项 指定各自错误日志的保存路径 理论上它们三者的错误应该不会重合 即 nginx error log 记录的是 nginx 进程自己的错误 php fpm err
  • Linux 帧缓冲子系统详解:LCD介绍、framebuffer驱动框架、LCD驱动源码分析

    1 LCD显示屏基础知识介绍 请看博客 嵌入式开发 S5PV210 LCD显示器 2 内核帧缓冲子系统 2 1 功能介绍 1 帧缓冲 framebuffer 是 Linux 为显示设备提供的一个接口 它把显示设备描述成一个缓冲 区 允许应用
  • 简单理解 进程 & 线程

    文章目录 线程与进程之间的区别和联系 进程 线程之间的理解 进程 进程管理 PCB 并行 并发 线程 线程与进程之间的区别和联系 进程包含线程 都是为了实现并发编程的方式 线程比进程更轻量 进程是系统分配资源的基本单位 线程是系统调度执行的
  • python:Numpy学习(二)切片合集

    前言 本文根据本人自己的学习成果总结的 内容难免产生纰漏 如有错误 望各位路过大佬指出 建议按顺序食用本文 效果更佳 文内例子均以二维数组为例 本文主要包含numpy ndarray数组的多种切片方法 在阅读本文前 请思考下面的问题 Q 假