1、numpy的类型与“类型代码”之间的映射关系
“ 类型代码 ”是我们在创建结构化数组的时候经常用到的,比如i8‘ 'U10’这样的类型标记,那他们到底是什么意思?
参见下面的对应关系:
2、花式索引——Fancy Indexing
花式索引指的是根据“整数素组 ”进行索引。下面以二维数组为例
a[[1,2,3,4]] #选取2、3、4、5行
a[[-1,-3,-7]] #根据负数索引也可以
a[[1,3,5],[2]] #花式索引选取第 2、4、6行的第3列元素
a[[1,3,5],[1,2]] #报错。总结:花式索引不能同时选取多行多列的单个元素,但是可以选取多行1列的元素
那怎么解决呢?
a[np.ix_([1,3,5],[1,2])] #选取第2、4、6行的对应的第2、3、列数据,不会出错
总结:np.ix_的使用方法
a [ np.ix_([.....行号....] , [.....列号....] ) ]
花式索引与切片不一样,总是产生新的数组,而不是视图。
3、数据排序
sorted函数:np.sort(a) 或者是 a.sort()
argsort函数:返回从小到大的顺序排列之后,数组的索引的位置。 np.argsort(a) a.argsort()
searchsorted函数:np.searchsorted(a,b) 返回的是b应该在a中插入的位置
b=np.array([1,3,5,7,9])
c=np.searchsorted(b,[4,8]) # 4应该插在3的后面,3的索引为1,故而返回2;8应该插在7的后面,7的索 引为3,故而返回4
print(c) # [2,4]
partition函数:
b=np.array([11,21,15,7,19])
c=np.partition(b,3) #已排序后的第3个数进行划分,索引数小于3的放在前面并排序,索引大于3的放在后面并排序
d=np.argpartition(b,3)
print(c) #[ 7 11 15 19 21]
print(d) #[3 0 2 4 1]
4、修改数组的形状
更改形状:a.shape=3,2 等价于a.reshape(3,2) 等价于np.reshape(a,newshape=(2,3))
数组转置:a.T 等价于 np.tranpose(a) 等价于a.swapaxes(0,1) #交换两个轴的顺序
增加维度:b=a[:,np.newaxis] b=a[np.newaxis,:,newaxis] b=b[newaxis,newaxis,:]
去除多余维度:将所有长度为一的维度去除,如一个数组为(1,5,1)去除之后变为了(5,)
np.squeeze(a)
数组拼接:c1=np.concatenate((a,b)) #默认axis=0 等价于np.vstack((a,b))
c2=np.concatenate((a,b),axis=1) 等价于np.hstack((a,b))
还有几个需要学习的,np.stack() ap.dstack() np.hsplit() np.vsplit()
数组展平:a.flat 等价于 a.flatten() 等价于 a.reval()
至少保证数组有 x 维:np.atleast_1d(a) np.atleast_2d(a) np.atleast_3d(a)
5、对角线:
a.diagonal() 可以使用偏置量来查看“ 次对角线 ”,正数表示右移,负数表示左移。
花式索引查看对角线:i=[1,2,3] a[i,i]
6、数组的产生函数
np.arange(start,end,step)
np.linespace(start,end,num)
np.logspace(start,end,num)
np.meshgrid(x,y) 等价于 np.mgrid[start:end:step,start:end:step] #注意mgrid不是函数哦
np.meshgrid(x,y,sparse=True) 等价于 np.ogrid[start:end:step,start:end:step] #注意ogrid不是函数哦
meshgrid 的理解:
产生行向量:np.r_[start,end,step] 也可以使用拼接 np.r_[(1,2,3),4,[5,6]] #将三者拼接起来
产生列向量:np.c_[start:end:step] #列向量不能使用拼接的方法。
np.ones() 还有类似的 np.ones_like(a)
np.zeros() 还有类似的 np.zeros_like(a)
np.empty() 还有类似的 np.empty_like(a)
产生单位矩阵:np.eye(5) 等价于 np.identity(5) #二者都产生5x5的单位矩阵
7、数组的集合运算
8、numpy中的 线性代数——numpy.linalg
9、numpy中的随机数——numpy.random