数组的切片操作
切片操作(从start开始,stop结束,stop不包括在内)
arr
 
输出:array([[19, 35, 62, 60, 45, 39],
       [80, 85, 68, 72, 34, 85],
       [ 7, 72, 48, 74, 24, 35],
       [12, 52, 96, 40, 2, 58],
       [39, 94, 50, 56, 49, 62]])
1. 切出数组的指定行数据
#切出前两行数据
arr[0:2] #arr[行切片]
 
输出:array([[19, 35, 62, 60, 45, 39],
       [80, 85, 68, 72, 34, 85]])
2. 切出数组的指定列数据
#切出前两列数据
arr[:,0:2] #arr[行切片,列切片]
 
输出:array([[19, 35],
       [80, 85],
       [ 7, 72],
       [12, 52],
       [39, 94]])
3. 切出数组的指定行和列数据
#切出前两行的前两列的数据
arr[0:2,0:2] #arr[行切片,列切片]
 
输出:array([[19, 35],
       [80, 85]])
4. 数组数据翻转(实质是设置step为-1)
#将数组的行倒置
arr[::-1]
 
输出: array([[39, 94, 50, 56, 49, 62],
       [12, 52, 96, 40, 2, 58],
       [ 7, 72, 48, 74, 24, 35],
       [80, 85, 68, 72, 34, 85],
       [19, 35, 62, 60, 45, 39]])
#将数组的列倒置
arr[:,::-1]
 
输出:array([[39, 45, 60, 62, 35, 19],
       [85, 34, 72, 68, 85, 80],
       [35, 24, 74, 48, 72, 7],
       [58, 2, 40, 96, 52, 12],
       [62, 49, 56, 50, 94, 39]])
#所有元素倒置
arr[::-1,::-1]
 
输出:array([[62, 49, 56, 50, 94, 39],
       [58, 2, 40, 96, 52, 12],
       [35, 24, 74, 48, 72, 7],
       [85, 34, 72, 68, 85, 80],
       [39, 45, 60, 62, 35, 19]])
数组的变形操作:reshape
arr#是一个5行6列的二维数组
 
输出:array([[69, 80, 7, 90, 31],
       [44, 37, 57, 26, 92],
       [91, 34, 13, 16, 93],
       [54, 87, 34, 5, 16],
       [47, 66, 51, 12, 54],
       [63, 20, 11, 94, 88]])
1)reshape((n,-1))是将数组转化为二维,行数为n,列数自行计算
 2)reshape((-1,n))是将数组转化为二维,列数为n,行数自行计算
 3)利用reshape实现降维
#将二维的数组变形成一维
arr_1 = arr.reshape((30,))
arr_1
 
输出:array([69, 80, 7, 90, 31, 44, 37, 57, 26, 92,91, 34, 13, 16, 93, 54, 87,
       34, 5, 16, 47, 66, 51, 12, 54, 63, 20, 11, 94, 88])
4)利用reshape实现升维
#将一维变形成多维
arr_1.reshape((6,5))
 
输出:array([[69, 80, 7, 90, 31],
       [44, 37, 57, 26, 92],
       [91, 34, 13, 16, 93],
       [54, 87, 34, 5, 16],
       [47, 66, 51, 12, 54],
       [63, 20, 11, 94, 88]])
数组的级联操作
1. concatenate:指定方向级联
arr#是一个5行6列的二维数组
 
输出:array([[69, 80, 7, 90, 31],
       [44, 37, 57, 26, 92],
       [91, 34, 13, 16, 93],
       [54, 87, 34, 5, 16],
       [47, 66, 51, 12, 54],
       [63, 20, 11, 94, 88]])
- 将多个同一维度的numpy数组进行横向或者纵向的拼接
 
- axis轴向的理解:
 
- 水平方向级联:
 
np.concatenate((arr,arr),axis=1)
 
输出:array([[69, 80, 7, 90, 31, 44, 69, 80, 7, 90, 31, 44],
       [37, 57, 26, 92, 91, 34, 37, 57, 26, 92, 91, 34],
       [13, 16, 93, 54, 87, 34, 13, 16, 93, 54, 87, 34],
       [ 5, 16, 47, 66, 51, 12, 5, 16, 47, 66, 51, 12],
       [54, 63, 20, 11, 94, 88, 54, 63, 20, 11, 94, 88]])
2. vstack:竖直方向级联
- np.vstack((arr,arr)):在竖直方向上延伸,相当于np.concatenate((arr,arr),axis=0)
 
import numpy as np
arr1=np.array([1,2,3])
arr2=np.array([4,5,6])
print(np.vstack((arr1,arr2)))
 
输出:[[1 2 3]
     [4 5 6]]
3. hstack:水平方向级联
- np.hstack((arr,arr)):在水平方向上延伸,相当于np.concatenate((arr,arr),axis=1)
 
print(np.hstack((arr1,arr2)))
 
输出:[1 2 3 4 5 6]
数组的拆分操作:split
arr
 
输出:array([[19, 35, 62, 60, 45, 39],
       [80, 85, 68, 72, 34, 85],
       [ 7, 72, 48, 74, 24, 35],
       [12, 52, 96, 40, 2, 58],
       [39, 94, 50, 56, 49, 62]])
- 将一个多维度numpy数组进行横向或者纵向的拆分;
 - axis轴向的理解:
 
- [ ]内的数:表示按该行/列进行拆分;
 
a1,a2 = np.split(arr,[2],axis=1)
print(a1)
print(a2)
 
输出:[[19 35]
     [80 85]
     [ 7 72]
     [12 52]
     [39 94]]
    [[62 60 45 39]
     [68 72 34 85]
     [48 74 24 35]
     [96 40 2 58]
     [50 56 49 62]]
数组的聚合操作
# 6x6多维数组(矩阵)
arr
 
输出:array([[62, 65, 51, 15, 30, 63],
       [37, 8, 55, 70, 13, 84],
       [46, 44, 86, 11, 72, 91],
       [10, 47, 3, 96, 9, 36],
       [54, 24, 55, 72, 29, 45]])
- 常用操作有:sum求和、max求最大值、min求最小值、mean求平均值;
 - 可以通过axis指定维度进行聚合操作,如果不指定就是对整个数组进行聚合操作:
 
# 求每一行的和
arr.sum(axis=1)
 
输出:array([286, 267, 350, 201, 279])
# 求每一行的最大值
arr.max(axis=1)
 
输出:array([65, 84, 91, 96, 72])
# 求数组的最大值
arr.max()
 
输出:96
常用的数学函数
1. 三角函数
- NumPy 提供了标准的三角函数:sin()、cos()、tan()
 
np.sin(2.5)
 
输出:0.5984721441039564
2. np.around:四舍五入
- numpy.around(a,decimals) 函数返回指定数字的四舍五入值。
 - 参数说明:
1) a: 数组
2) decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置 
np.around(3.84,2)
 
输出:3.84
3. np.prod:乘积函数
- 返回给定维度上各个元素的乘积
 - numpy.prod(a,axis=None,dtype=None,out=None,keepdims=,initial=)
 - 参数说明:
1)axis:是指求积的维度;
2)keepdims:是指保持维度,不缩减;
3)initial:是起始数,即返回的矩阵会用乘积结果再乘该起始数; 
# 不指定维度则整体求乘积
np.prod([[1.,2.],[3.,4.]])
 
输出:24.0
# 求每行的乘积
np.prod([[1.,2.],[3.,4.]], axis=1)
 
输出: array([ 2. , 12. ])
# 求出数组整体乘积,并乘起始数
np.prod([1, 2], initial=5)
 
输出:10
常用的统计函数
- array.amin() 和 array.amax():用于计算数组中的元素沿指定轴的最小、最大值;
 - array.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值);
 - array.median():函数用于计算数组中元素的中位数(中值);
 - array.std():函数用于计算数组中元素的标准差(一组数据平均值分散程度的一种度量);
 
arr[1].std()
 
输出:26.66718749491384
- array.var():函数用于计算数组中元素的方差;
 
arr[1].var()
 
输出: 711.138888888889
矩阵的相关操作
-  
NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。一个矩阵是一个由行(row)列(column)元素排列成的矩形阵列。
 -  
numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。
 
1. 标准单位矩阵:np.eye
#eye返回一个标准的单位矩阵
np.eye(6)
 
输出:array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]])
2. 矩阵转置:array.T
arr.T
 
输出:array([[69, 37, 13, 5, 54],
       [80, 57, 16, 16, 63],
       [ 7, 26, 93, 47, 20],
       [90, 92, 54, 66, 11],
       [31, 91, 87, 51, 94],
       [44, 34, 34, 12, 88]])
3. 矩阵相乘:numpy.dot
-  
numpy.dot(a, b, out=None)
1)a : ndarray 数组
2)b : ndarray 数组

 -  
第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
 -  
线性代数基于矩阵的推导
 
a1 = np.array([[2,1],[4,3]])
a2 = np.array([[1,2],[1,0]])
np.dot(a1,a2)
 
输出:array([[3, 4],
       [7, 8]])










