《玩转Numpy计算库》视频课程
《玩转Numpy计算库》视频课程链接:https://edu.csdn.net/course/detail/28656

索引和切片 (Indexing and Slicing)

赋值和访问数组的元素类似于Python的其他序列数据类型,如列表和元组。 Numpy还有很多索引选择,类似于列表和元组的索引。

假设你熟悉Python的列表和元组的切片。 对于一维数组,其语法在numpy中是相同的,但它也可以应用于多个维度。

一维数组A的一般语法如下所示:

A[start:stop:step]

下面用一些例子说明“切片”的工作原理。 从最简单的情况开始,即切片一维数组:

F = np.array([1, 2, 2, 3, 5, 8, 13, 21])
# print the first element of F
print(F[0])
# print the last element of F
print(F[-1])
1
21

data = np.array([1, 2, 3])print(data[1])print(data[0:2])print(data[1:])print(data[-2:])
2
[1 2]
[2 3]
[2 3]

注意:在列表和元组上的切片会创建新对象,但对数组执行切片操作会在原始数组上创建一个视图(view)。 如果我们修改一个视图,原始数组也将被修改。

A = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
S = A[2:6]
print(S)
[2 3 4 5]
S[0] = 22
S[1] = 23
print(A)
[ 0  1 22 23  4  5  6  7  8  9]

使用列表执行类似的操作,可以看到我们得到了一个拷贝(副本):

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = lst[2:6]
lst2[0] = 22
lst2[1] = 23
print(lst)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

索引多维数组:

A = np.array([ [3.4, 8.7, 9.9], [1.1, -7.8, -0.7],[4.1, 12.3, 4.8]])
print(A[1][0])
1.1

我们访问了第二行中的元素,即索引为1的行和索引为0的第1列。

上面访问多维数组的方式可能非常低效。 原因是我们创建了一个中间数组A[1],从中访问索引为0的元素。所以它的行为类似于:

tmp = A[1]
print(tmp)
print(tmp[0])
[ 1.1 -7.8 -0.7]
1.1

在Numpy中还有另一种访问多维数组元素的方法:只使用一对方括号,所有索引都用逗号分隔:

print(A[1, 0])
1.1

在处理矩阵时,索引和切片操作非常有用:

data = np.array([[1, 2], [3, 4],[5,6]])
data
array([[1, 2],[3, 4],[5, 6]])
data[0, 1]
2
data[1:3]
array([[3, 4],[5, 6]])
data[0:2, 0]
array([1, 3])

a = np.arange(40).reshape(5, 8)
print(a)
[[ 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 27 28 29 30 31][32 33 34 35 36 37 38 39]]
a[2, -3]
21

a[:3, :5]
array([[ 0,  1,  2,  3,  4],[ 8,  9, 10, 11, 12],[16, 17, 18, 19, 20]])

a[-3:, -3:]
array([[21, 22, 23],[29, 30, 31],[37, 38, 39]])

a[:, 3]
array([ 3, 11, 19, 27, 35])

a[1, 3:6]
array([11, 12, 13])

a[1::2, ::3]
array([[ 8, 11, 14],[24, 27, 30]])

如果选择元组中的对象数目小于维N,则对于任何后续维度的假定是’:’。例如

A = np.array([ [ [45, 12, 4], [45, 13, 5], [46, 12, 6] ], [ [46, 14, 4], [45, 14, 5], [46, 11, 5] ], [ [47, 13, 2], [48, 15, 5], [52, 15, 1] ] ])
A[1:3, 0:2]  # equivalent to A[1:3, 0:2, :]
array([[[46, 14,  4],[45, 14,  5]],[[47, 13,  2],[48, 15,  5]]])

8. Numpy的索引和切片 (Indexing and Slicing)相关推荐

  1. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片合并分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程序示 ...

  2. Python 科学计算库 Numpy (二) —— 索引及切片

    目录 1. 索引及切片 (1)通过下标以及内置函数进行索引切片 (2)使用冒号分隔参数进行切片索引 (3)对部分元素进行索引并切片 (4)对多维数组进行索引切片 2. 高级索引 (1)整数数组索引 ( ...

  3. 08_索引与切片,Indexing,Python风格的索引,index_select()选择特定索引,使用...索引任意多的维度,使用mask索引,take索引

    1.8.索引与切片 1.8.1.Indexing 1.8.2.Python风格的索引 1.8.3.index_select()选择特定索引 1.8.4.使用-索引任意多的维度 1.8.5.使用mask ...

  4. 乐哥学AI_Python(二):Numpy索引,切片,常用函数

    Numpy的索引和切片 ndarray对象的内容可以通过索引和切片查看和修改. 索引:ndarray对象中的元素索引基于0开始 切片:对数组里某个片段区域的描述 数组的切片也可以理解为原始数组的局部视 ...

  5. Numpy数组的索引与切片:取数组的特定行列

    0.前言 Numpy的数组除了可使用内置序列的索引方式之外,提供了更多的索引能力,如通过切片.整数数组和布尔数组等方式进行索引.这使得Numpy索引功能很强大,但同时也带来了一些复杂性和混乱性,尤其是 ...

  6. Numpy入门教程:02. 索引、切片与迭代

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  7. python数组索引和切片_python numpy数组的索引和切片的操作方法

    NumPy - 简介 NumPy 是一个 Python 包. 它代表 "Numeric Python". 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric, ...

  8. Python基础学习——Numpy包(2、索引、切片与迭代)

    1. 副本与视图 Numpy中做数组运算或数组操作时,返回结果都是数组的副本或视图. 副本:原有数据的一份拷贝,改变副本不会改变原数据 视图:原有数据的一个引用或别称(赋值操作),对视图的修改会引起原 ...

  9. NumPy(十):ndarray数组索引、切片

    一维.二维.三维的数组如何索引? 直接进行索引,切片 对象[ : , : , : ] – 先行后列 (以逗号分开各个维度,第1组表示第1维的切片方式,第2组表示第2维的切片方式-) 一.基本索引及切片 ...

  10. python numpy矩阵切片_Numpy数组的索引与切片和变形拼接分裂

    1.概述 今天我们来讲一下Numpy数组的索引与切片,numpy数组的索引与切片和Python中的切片与索引的作用相同,可以快速的取出数据,进行下一步的运用或者查看,但是两种切片还有一些不同的地方.另 ...

最新文章

  1. 数据分析需求转型与商业模式重构
  2. 1.7 matlab矩阵元素的引用(可通过下标和序号引用)
  3. SUMO 设置车辆的换道模型
  4. CodeForces - 431C k-Tree(dp)
  5. 关于纠正2009年12月22日的总结的position的absolute.relative用法
  6. java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
  7. 【输入法】Rime-中州韵 基本设置 附:官方定制指南
  8. Rust : AES算法加密、解密
  9. 如何用计算机画出分子轨道图,常见的分子轨道图.pdf
  10. matlab经验分布函数 教程,经验分布函数.ppt
  11. python视频教程唐学韬-python
  12. 持久化内存挑战PERSISTENT MEMORY CHALLENGES
  13. 4、网络嗅探器的设计与实现
  14. 还记得JavaWeb中的组件Servlet吗?面试会问
  15. 2020-12-01 剖析 Linux hypervisor
  16. 用python实现一个自动保存复制图片的功能
  17. CentOS安装sun java
  18. 颜色转换助手RGB888-565
  19. 陌生男女社交软件交流手册
  20. ucore lab2

热门文章

  1. java 同比环比_数据相关概念同比,环比
  2. 基于三维激光雷达的二维占据栅格地图构建-简介
  3. 微信公众号迁移公证需要哪些材料?账号迁移流程来了
  4. STM32定时器周期任务函数编写
  5. 模板,宏,atuo关键字的简述
  6. 闰年2月29号 通过apache的ftp工具从ftp上下载文件失败
  7. 有道计算机网络知识,网易有道推广介绍1 让你了解到网易的知识。。。.pptx
  8. flutter报错-‘CachedNetworkImageProvider.load‘ has fewer positional arguments than those of overridden
  9. 证券期货行业数据模型设计
  10. Flash上传文件(结合asp.net)