一、numpy索引
1.1
布尔索引
row_index = (M[:,0] >= 20) & (M[:,0] <= 80)
col_index = M[0,:] >= 5
M[row_index,:][:,col_index]
注意:不能在同一个方括号中对列和行都使用布尔索引。新词我们必须先在行方向上进行布尔选择,然后重新打开方括号进行第二次选择,这一次集中在列方向上选择
如果需要对数组元素进行全局选择,可以
mask = (M >= 20) & (M <= 90) & ((M / 10) % 1 >= 0.5)
M[mask]
1.2 花式索引
row_index = [1,1,2,7]
col_index = [0,2,4,8]
M[row_index,col_index] # 选出(1,0)(1,2)(2,4)(7,8)位置的元素
M[row_index,:][:,col_index] # 选出4行4列
注意:花式索引和普通步数切片索引,要牢记
1.3 普通索引
M[2:9:2,:] # 第2至8行的偶数行
M[2:9:2,5:] # 第2至8行的偶数行&第6列以后的数据
M[2:9:2,5::-1] # 第2至8行的偶数行&第6列开始,逆序取值到第一列
注意:切片和索引只是数据的观测,如果需要为这些观测创建新的数据则必须使用.copy()方法将切片数据赋给另一个变量,否则,对原数组的修改都将反映到切片数据上
也就是说,数组切片索引是原始数组的视图,它与原始数组共享一个数据存储空间,即数据不会被复制,视图上的惹和修改会直接反映到原始数组
N = M[2:9:2,5:].copy()
二、numpy的属性
shape、dtype、ndim、size、T、flat、nbyte
三、numpy函数
np.sort(s,axis=...):返回排序后的数组
np.argsort(s):返回数组排序后的下标(下标为原未排序的下标)
np.lexsort():根据键值的字典序进行排序
s.reshape(1,2,3):维度改变
np.transpose(s):转置=s.T
四、数组组合、分拆
np.hstack((a,b)):a,b水平组合=np.concatenate((a,b),axis=1),列数增加
np.vstack((a,c)):a,c竖直组合=np.concatenate((a,b),axis=0)类似于新增记录,行数增加
深度组合、列组合、行组合见阮敬python数据分析基础
np.hsplit(a,3):结果是列表,列表中第一个元素是分割后第一列的结果,=np.split(a,3,axis=1)
np.vsplit(a,3):结果是列表,列表中第一个元素是分割后第一行的结果,=np.split(a,3,axis=0)
五、ufunc运算
universal function是一种能对数组中每个元素进行操作的函数,使用outer关键字指定把函数返回结果存储在指定数组
5.1 reduce、accumulate、reduceat、outer
np.add(a1,a2)
a1>a2
any(a1>a2)
all(a1>a2)
5.2 自定义ufunc函数
frompyfunc(func,n_in,n_out)