python-numpy
1.条件和布尔数组
从数组中选择性抽取元素的方法是使用条件表达式和布尔运算符
| 1 | # 从由0到1之间的随机数组成的4×4型矩阵中选取所有小于0.5的元素。 | 
创建随机数矩阵后,如果使用表示条件的运算符,比如这里的小于号,你将会得到由布尔值组成的数组。对于原数组中条件满足的元素,布尔数组中处于同等位置的元素为True。
| 1 | A<0.5 | 
实际上,从数组中选取一部分元素时,隐式地用到了布尔数组。其实,直接把条件表达式置于方括号中,也能抽取所有小于0.5的元素,组成一个新数组。
| 1 | A[A<0.5] | 
2.形状变换
用reshape()函数把一维数组转换为矩阵。
reshape()函数返回一个新数组,因而可用来创建新对象。然而,如果想通过改变数组的形状来改变数组对象,需把表示新形状的元组直接赋给数组的shape属性。
由输出结果来看,上述操作改变了原始数组的形状,而没有返回新对象。改变数组形状的操作是可逆的,ravel()函数可以把二维数组再变回一维数组。
直接改变数据shape属性的值也可以
另外一种重要的运算是交换行列位置的矩阵转置。Numpy的transpose()函数实现了该功能
| 1 | a.ravel() | 
3.数组操作
- 连接数组- 多个数据库整合在一起形成一个包含这些数组的新数组(Numpy使用了栈这个概念,提供了几个运用栈概念的函数) - 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- # vstack()函数执行垂直入栈操作,把第二个数组作为行添加到第一个数组,数组朝垂直方向生长。相反,hstack()函数执行水平入栈操作,也就是说把第二个数组作为列添加到第一个数组。 
 A= np. ones ((3,3))
 B= np. zeros((3,3))
 np.vstack((A,B))
 # array([[ 1.,1.,1.],
 # [ 1., 1., 1.],
 # [ 1., 1., 1.],
 # [ o., o., o.],
 # [ o., o., o.],
 # [ o., o., o.]])
 np.hstack((A,B))
 #array([[ 1., 1., 1., 0., 0., 0.],
 # [ 1., 1., 1., 0., 0., 0.],
 # [ 1., 1., 1., 0., 0., 0.]])
 #另外两个用于多个数组之间栈操作的函数是column_stack()和row_stack()。这两个函数不同于上面两个。一般来讲,这两个函数把一维数组作为列或行压入栈结构,以形成一个新的二维数组。
 a = np.array([0,1,2])
 b = np.array([3,4,5])
 C = np. array([6,7,8])
 np.column_stack((a, b,c))
 #array([[0,3,6],
 # [1,4,7],
 # [2,5,8]])
 np.row_stack((a, b,c))
 #array([[0,1,2],
 # [3,4,5],
 # [6,7,8]])
- 数组切分- 在NumPy中,该操作要用到切分方法。同理,我们也有一组函数,水平切分用hsplit()函数,垂直切分用vsplit()函数。 - 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- A = np.arange(16).reshape((4,4)) 
 # array([[ 0,1,2,3],
 # [ 4, 5,6,7],
 # [8,9,10,11],
 # [12,13,14,15]])
 #水平切分
 [B,C] = np.hsplit(A,2)
 B
 #array([[ 0,1],
 # [ 4,5],
 # [ 8,9],
 # [12,13]])
 C
 #array([[ 2,3],
 # [ 6,7],
 # [10,11],
 # [14,15]])
 #垂直切分
 >>>[B,c]= np.vsplit(A,2)
 B
 # array([[0,1,2,3],[4,5,6,7]])
 C
 # array([[ 8,9,10,11],[12,13,14,15]])- split()函数更为复杂,可以把数组分为几个不对称的部分。此外,除了传入数组作为参数外,还得指定被切分部分的索引。如果指定axis=1项,索引为列索引;如果axis=0,索引为行索引。