1.4.1 Basic Slicing and Indexing
说明:
元组索引其实就是方括号里添加索引
可以引发basic index的情况:
- slice对象
- integer
- slice对象,integer,newaxis,Ellipse的元组形式
- newaxis
- 当是列表时,列表里面不只包含数字,还包含slice,Ellipsis,newaxis,则也会触发高级索引
索引都是从 0 开始,并且负数索引表示从后面开始记起
下面的切片,不管怎么表示,都要将其理解为 0-(n-1) 范围内的索引,然后索引出对应的值
简单索引,产生的数组都是原数组的视图
1. 其中 i+(m-1)k < j , 即取不到j处。
1. 使用负数的步长,表示的是从大索引处走向小索引处
2. 展示的结果是:从步长起步的索引处开始展示结果,如图中example
切片省略情况下,指示的默认值:
1. 左边->0 ; 右边->n(注意是n,超出索引范围,这样才能取到);k->1;
2. 维度不够,默认表示 :
3. ellipsis用 : 进行扩展,其实就是在最后一个维度之前进行扩展,并且表达式中只能有一个 ...
4. newaxis : 用来增加一个维度
想说明的就是:只要元组里面出现了一个整数,那么返回的结果维度减1;
另外,如果维度减到0了,那么返回的就是一个标量
1. 使用切片返回的结果维度不变
2. 对于数组的选择,本质就是其他维度不变,对于被处理的维度,将其理解为从这个维度切下来一个平面,然后根据被处理的维度上选择的结果,将切割的平面拼接一起就是索引结果。(如下图)
简单切片,可以理解为每个维度反复应用切片,每一次切片在上一次切的结果下继续切
1. 简单切片特性和高级切片特性不同
2. array数组能够通过等于号为其赋值,但是数组的大小不能变化
3. 赋值的时候,等号右边的对象,必须能够广播为和左边被赋值对象相同形状,操作才能成功
Advanced Indexing
高级索引特点:
1. 索引对象是数组
2. 索引对象是元组,但是元组里面至少包含一个序列或者数组
上面的两种情况都会触发高级索引
3. 高级索引用的索引值,只能是布尔型和数值型
触发不同索引总结:当 [] 里面包含多个对象时,则想象外面套一个元组,(如x[(1,2,3),])或者本身就已经元组嵌套,如x[(1,2,3)] 这两种情况下都用元组判断原则来判断,即里面至少有一个序列时,则引发高级索引,否则引发普通索引。当 [] 里面已经是 [] 时,观察里面是否都是数字,如果都是数字,如x[[1,2,3]]则引发高级索引;如果不都是数字,则在多个维度上引发普通索引,如x[[1,2,::]]。
高级索引返回的都是原数组的复制版本
1. 数组中每个值表示选出这个维度中的哪几列
2. 当索引对象中包含多个数组,那么这些数组会广播
3. 用数组进行索引的那几个维度,最后返回结果的形状和数组的形状相同
4. 高级索引不同于普通索引,可以重复一个索引操作,在高级索引中,是多个数组共同作用,表示某一个位置的坐标才索引出结果。
使用方法1:表示第几行第几列中的数组,需要构建坐标,构建坐标有两种方法,一种就是直接自己加newaxis,如图,另一种就是使用 ix_.
使用方法2:就是图1中那样,索引出零散的值,索引对象中的数组表示坐标,由于没有重复特性,所以需要将所有位置都写出
1. 高级切片结合基础切片分为两种情况,第一种就是高级索引的矩阵是分离的,第二种就是二级索引的矩阵是连一起的。
2. 对于高级切片结合基础切片索引结果的说明,主要结合形状进行说明,如果是二级索引的矩阵是连一起的情况,那么相当于将被索引的那几个维度的形状换为高级索引数组的形状;如果是高级索引的矩阵是分离的情况,那么将被索引的那几个维度剔除,换成索引数组的维度,并且放在索引结果的开头部分。
3. 至于内部数据是怎么放置的,上面已经得到了索引结果的形状,内容就相当于将所引导的结果插入被索引的那个维度或者那个平面上
**布尔型索引重点在于,将索引对象调用nonzero()的结果当作索引。