numpy库具有强大的n维数组矩阵运算能力,而且使用起来也是非常方便,数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。也可以采用冒号的方式,构建切片对象,也可采用负号从倒数进行索引,范例源码如下所示:
import numpy as np
a = np.arange(100);
a.shape=(10,10);
print(a[:, 1]) # 第2列元素
print(a[1,:]) # 第2行元素
print(a[2:9:2,2:9:2]) # start, stop 及 step 参数 获取第3列到第6列 第3行到第6行的数据
print(a[:, 1:]) # 第2列及剩下的所有元素
print(a[:, :1]) # 第2列以前的所有元素
a[2:9:2,2:9:2]=np.zeros((4,4),np.int); #修改索引位置数据
print(a[:, -1]) # 倒数第一列数据
print(a[:, :-3]) # 倒数第3列之前的数据
print(a);
【注意】 与matlab索引方式的差异,它采用的是start:stop:step顺序来构建切片对象。 除了以上整数索引方式,还有3种高级索引,分别是整数数组索引、布尔索引和花式索引,下面分别讲述一个例子,方便读者理解, 1.整数数组索引:对应的坐标放在数组里,然后在中括号内索引,例子如下所示:
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
rows = np.array([0,0,3,3])
cols = np.array([0,2,0,2])
y = x[rows,cols]
print(y);
2.布尔索引:通过布尔数组来过滤数组中的元素值,源码如下:
import numpy as np
x = np.arange(32).reshape((8, 4));
y=x[x>3]; #获取返回结果
print(y);
x[x>3]=0; #修改索引位置的值
print(x);
【注意】经过布尔索引之后,返回值变为了一维数组。 3.花式索引:花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行数据。
import numpy as np
x = np.arange(32).reshape((8, 4))
print(x[[3, 2, 1, 1]]) #对应行号的数据