索引
- 没有冒号“:”的,表示索引
>>> a=np.arange(36)
>>> b=a.reshape(4,3,3)
>>> a[5]
5
一维切片
- 带冒号“:”的,是切片
- 1、正数,数据是从左到右
- 2、负数,数据是从右到左
>>> a[:5]
array([0, 1, 2, 3, 4])
>>> a[5:]
array([ 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])
2、“:5”,冒号在左边,数据从左边第一个数据开始,到索引5结束
“5:”,冒号在右边,数据从索引6开始,到最后一个数结束
>>> a[5:20]
array([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
“5:20”,数据从索引6开始,到索引20结束
>>> a[-1:]
array([35])
>>> a[-2:]
array([34, 35])
>>> a[:-3]
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, 27, 28, 29, 30, 31, 32])
-1: ,从右边倒数第一个开始,到最后一个,(只有一个^_^)
-2: ,从右边倒数第二个开始,到最后一个,共两个
>>> a[3:-2]
array([ 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])
3:-2,从索引4开始,到倒数第2个结束
PS:这不就是excel内的单元格引用吗?
二维切片
>>> c=a.reshape(6,6)
>>> c[:2]
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
>>> c[:3]
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
只有一个参数,默认就是对axis 0进行切片,axis 1 的数据是一个整体,没有被切
>>> c[:2,1]
array([1, 7])
>>> c[:3,2]
array([ 2, 8, 14])
[ ]中第二个非空,没带冒号,就是axis 0 切片,axis 1索引
>>> c[:3,:2]
array([[ 0, 1],
[ 6, 7],
[12, 13]])
>>> c[:2,:3]
array([[0, 1, 2],
[6, 7, 8]])
二维数组中,[ ]中两个都有冒号,表示axis 0 切片,axis 1也是切片
多维切片
一般先切出几个二维的数组,numpy中,高维在前,低维在后