官方文档,汉化之源
用到啥翻译啥,随缘更
numpy中可支持三种索引方式 field access, basic slicing, advanced indexing
我以我六级424的水平翻译以下就是:区域访问,基本操作,花里胡哨
Basic Slicing and Indexing
基本操作仅限于索引内容为 slice对象 单个整数 整数和slice的元组
slice对象就是长这样的(stat:stop:step)
例如: A[(::2)]
具体见下懒得翻译了
但是注意slice索引方式得到的切片是原数据的一个视图An array that does not own its data, but refers to another array’s data instead.
视图自身没有数据,但它指向其他数组的数据
所以当你修改所指向数组的数据的时候,视图的数据也会随之改变
以下是几种常用切片方式
- 基本的slice形式就是star:stop:step 取出的star与stop之间步长为step的等差序列
- Example
>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x[1:7:2]
array([1, 3, 5]) - slice支持负数,表示从尾到首的倒序遍历
- Example
>>> x[-3:3:-1]
array([7, 6, 5, 4]) - star没有指定时,参考step的正负,为正star=0,为负star=n-1
stop没有指定时,参考step正负,为正stop=n,为负stop=-n-1
:和::意义相同,都表示选取当前轴所有元素 - Example
>>> x[5:] array([5, 6, 7, 8, 9])
Advanced Indexing
这里有两种高级索引:整数 布尔
注意高级索引返回的是原数据的copy,不再是视图
Integer array indexing
整数数组的高级索引就是拿坐标做索引,然后这个整数数组就是哪个坐标
这个今天不用不翻了
Boolean array indexing
当索引为布尔数组时对应的骚操作。这类索引等效于x[obj.nonzero()]
,就是把索引obj中所有不为0的元素位置挑出来构成一个索引
举个栗子
A = np.array(np.random.rand(5))
A[A > 0.5] = 1
A > 0.5
会先返回一个布尔数组,根据这个布尔数组True的位置生成索引
befor: [ 0.98888704 0.03145936 0.51336152 0.45780306 0.84787507]
after: [ 1. 0.03145936 1. 0.45780306 1. ]