NumPy(Numerical Python)是python语言的一个扩展程序库,支持大量维度数组与矩阵运算,此外,也针对数据运算提供大量的数学函数库。python
NumPy是高性能科学计算和数据分析的基础数组
NumPy的主要功能:dom
ndarray,一个多维数组结构,高效且节省空间ide
无需循环对整组数据进行快速运算的数学函数函数
*读写磁盘数据的工具以及用于操做内存映射文件的工具工具
*线性代数、随机数生成和傅里叶变换功能性能
*用于集成C、C++等代码的工具ui
pip install numpy
ndarry是多维数组结构,与列表区别:lua
数组对象内的元素类型必须相同spa
数组大小不可修改
import numpy as np np.array() # 建立一维数组 np.array([1,2,3,4,5]) # array([1, 2, 3, 4, 5]) # 建立二维数组 np.array([[1,2,3],[4,5,6]]) # array([[1, 2, 3], [4, 5, 6]])
注意:
numpy默认ndarray的全部元素的类型是相同的
若是传进列表中包含不一样的类型,会统一为一个类型,优先级:str>float>int
np.array([[1,2.2,3],[4,5,6]]) # 整数都会变成浮点数 # array([[1. , 2.2, 3. ], [4. , 5. , 6. ]])
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数量数组
np.linspace(1,100,num=20) # 产生1-100之间数量20个的等差数组
np.arange([start, ]stop, [step, ]dtype=None) 等差步长数组
np.arange(0,100,step=2) # 产生0-100,步长为2的等差数组
random.randint(low,high=None,size=None,dtype="1")
np.random.randint(0,100,size=(4,5)) # size表示维度 # array([[83, 58, 4, 20, 35], [13, 33, 30, 14, 79], [86, 58, 33, 44, 63], [43, 40, 55, 16, 13]]) # 固定随机数组的随机因子,每次产生固定不变数组 np.random.seed(10) # 随机因子/时间种子 np.random.randint(0,100,size=(4,5))
T:数组的转置(对高维数组而言)
dtype:数组元素的数据类型
size:数组元素的个数
ndim:数组的维数
shape:数组的维度大小(以元组形式)
img_arr = plt.imread('./girl.jpg') # 打开一张图片,获取图片的矩阵数组 # 获取数组的维度 img_arr.ndim # 3 # 获取数组的外形 img_arr.shape # (676, 1202, 3) # 获取数组的大小 img_arr.size # 2437656 # 获取数组的数据类型 img_arr.dtype # dtype('uint8')
numpy.zeros(dim1,dim2) 建立dim1*dim2的零矩阵 numpy.arange numpy.eye(n) /numpy.identity(n) 建立n*n单位矩阵 numpy.array([…data…], dtype=float64 ) array.astype(numpy.float64) 更换矩阵的数据形式 array.astype(float) 更换矩阵的数据形式 array * array 矩阵点乘 array[a:b] 切片 array.copy() 获得ndarray的副本,而不是视图 array [a] [b]=array [ a, b ] 二者等价 name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool) data[True,False,…..] 索引,只索取为True的部分,去掉False部分 经过布尔型索引选取数组中的数据,将老是建立数据的副本。 data[ [4,3,0,6] ] 索引,将第4,3,0,6行摘取出来,组成新数组 data[-1]=data[data.__len__()-1] numpy.reshape(a,b) 将a*b的一维数组排列为a*b的形式 array([a,b,c,d],[d,e,f,g]) 返回一维数组,分别为[a,d],[b,e],[c,f],[d,g] array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ] array.T array的转置 numpy.random.randn(a,b) 生成a*b的随机数组 numpy.dot(matrix_1,matrix_2) 矩阵乘法 array.transpose( (1,0,2,etc.) ) 对于高维数组,转置须要一个由轴编号组成的元组
一、数组和标量之间的运算 a+1 a*3 1//a a**0.5 二、一样大小数组之间的运算 a+b a/b a**b 三、数组的索引: 一维数组:a[5] 多维数组: 列表式写法:a[2][3] 新式写法:a[2,3] (推荐) 数组的切片: 一维数组:a[5:8] a[4:] a[2:10] = 1 多维数组:a[1:2, 3:4] a[:,3:5] a[:,1] 四、强调:与列表不一样,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 【解决方法:copy()】
一维数组的索引和列表一致,多维同理
没法直接索引某一列
arr = np.random.randint(0,100,size=(5,7)) arr[1] # 获取索引为1的行 arr[[1,2]] # 获取索引1,2的行 arr[1,2] # 获取行索引为1,列索引为2的值
一维数组的切片和列表相同,多维同理
# 获取二维数组前两行 arr[0:2] # 默认切片为行索引 # 获取二维数组前两行和前两列 arr[0:2,0:2]
数据反转
# 将数组的行反转 arr[::-1] # 将数组的列反转 arr[:,::-1] # 所有反转 arr[::-1,::-1]
ndarray数组可使用arr.reshape()函数,注意参数是一个tuple
多维数组和一维数组之间的转换
arr = np.random.randint(0,100,size=(4,6)) arr.shape # 二维变一维 arr_1 = arr.reshape(24) arr_2 = arr.reshape((1,24)) # 一维变多维 arr_3 = arr_1.reshape((3,8)) arr_4 = arr_1.reshape arr_5 = arr_1.reshape((4,-1)) # -1表示自动计算 # 多维转多维 arr_6 = arr.reshape((3,8))
注意:
在变形的过程当中,数组的维度乘积必须是一致的,如4*6 能够变形为2*12,也能够变为8*3,1*24
np.concatenate()
对多个numpy数组进行横向或者纵向的拼接
1.一维、二维、多维数组的级联,实际操做中级联为二维数组
np.concatenate((arr,arr),axis=0) # axis表明轴向,0表示咧,1表示行
2.合并照片
# 利用咱们刚才打开的照片数组 arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # 水平拼接三个数组 arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0) # 垂直拼接上面拼接的图片 plt.imshow(arr_9) # 最终展现为9宫格的图片
问题:给一个数组,选出数组中全部大于5的数。
答案:a[a>5] 原理: a>5会对a中的每个元素进行判断,返回一个布尔数组 布尔型索引:将一样大小的布尔数组传进索引,会返回一个由全部True对应位置的元素的数组
问题2:给一个数组,选出数组中全部大于5的偶数。
问题3:给一个数组,选出数组中全部大于5的数和偶数。
答案: a[(a>5) & (a%20)] a[(a>5) | (a%20)]
import numpy as np a = np.array([1,2,3,4,5,4,7,8,9,10]) a[a>5&(a%2==0)] # 注意加括号,不叫括号错误,以下 # array([ 1, 2, 3, 4, 5, 4, 7, 8, 9, 10]) a[(a>5)&(a%2==0)] # array([ 8, 10])
numpy.sum():求和函数
numpy.max()/min():最大值/最小值
numpy.mean():平均值
cumsum:求前缀和
std:求标准差
var:求方差
argmin:求最小值索引
argmax:求最大值索引
arr.sum(axis=1) # 列向求和 arr.max(axis=1) # 列向最大值 arr.mean(axis=1) # 列向平均值
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 幂运算
numpy.sort()和ndarray.sort()均可以排序,稍有区别
numpy.sort(arr,axis=0) # 返回一个新的排序好的对象,arr并无改变 arr.sort(axis=0) # arr直接被改变了