不是最全,但是也是很详细的练习,阅读时长可能过长,建议先收藏
(一) 定义
(1)官方文档:
NumPy is the fundamental package for scientific computing with Python. It contains among other things:
a powerful N-dimensional array object
sophisticated (broadcasting) functions
tools for integrating C/C++ and Fortran code
useful linear algebra, Fourier transform, and random number capabilities
(2)大概意思是:
一个用python实现的科学计算包。
1、一个强大的N维数组对象Array;
2、比较成熟的(广播)函数库;
3、用于整合C/C++和Fortran代码的工具包;
4、实用的线性代数、傅里叶变换和随机数生成函数。
5、numpy和稀疏矩阵运算包scipy配合使用更加方便
(二)使用概览
由于这里使用的函数比较多,故分了几个大模块进行练习,练习具体到使用每个函数
(一)使用numpy构建矩阵
(二)元素的获取
(三)各种数学函数
(四)统计函数
(五)映射函数
(六)离散与连续分布
(七)数据加载与导出
NumPy
(三)具体使用
(一)使用numpy构建矩阵【array函数】
import numpy as np""" 创建一维数组(列表或者元组),二维数组(嵌入的列表或元组) """arr1 = np.array([1,3,5,6,7,9]) print(arr1) arr2 = np.array((2,3,4,5,6,8,9)) print(arr2) arr_two = np.array([[1,2,3,4,5],[2,3,4,5,6,7],[5,6,7,9]]) print(arr_two) arr_two_2 = np.array([[2,3,4,5],[2,3,4,5],[5,6,7,9]]) print(arr_two_2)
运行结果:
NumPy构建矩阵
需要注意的是arr_two返回的是一个list,里面的数组个数不一致,返回的便是每个list
(二)元素的获取【shape函数】
(1) 返回一个数组的行数与列数
""" 返回一个数组的行数和列数 """arr1_shape = arr1.shape arr2_shape = arr2.shape arr_two_shape = arr_two.shape arr_two_shape_2 = arr_two_2.shape print('返回列表行数和列数********************') print(arr1_shape,arr2_shape,arr_two_shape,arr_two_shape_2)
(2)使用索引的方式,获取元素
""" 元素的获取:使用索引的方式 行列的表示[行,列] """print('元素的获取,使用索引的方式*******************') print(arr_two_2,'\n')# (1)获取二维数组的某列(这里获取第二列,列表索引下标从0开始)print(arr_two_2[:,2],'\n')# (2)获取二维数组的某行(这里获取第一行)print(arr_two_2[1,:],'\n')# (3)获取二维数组的某个元素print(arr_two_2[2,3],'\n')
(3)获取列表矩阵
print("返回列表矩阵****************")print(arr_two_2,'\n')# 获取二维数组的某几行print(arr_two_2[[0,2],:],'\n')# 获取二维数组的某几列print(arr_two_2[:,[0,1,3]],'\n')# 获取二维数组的某几行某几列元素(M3):这里得到的是一个一维数组print(arr_two_2[[0,2],[2,3]],'\n')# 获取二维数组的某几行某几列元素(M4): 这里得到的是一个2x2的矩阵print(arr_two_2[np.ix_([0,2],[2,3])])
NumPy元素的获取
(三)各种数学函数
函数包括:绝对值,算数平方根,平方,指数,对数,符号函数,向上/下取整,返回最近的整数,幂运算
建议收藏后在PC端看,
print('******************* np 的其他相关数学函数 ************************* ')# 绝对值abs_template = [-3,-2,-1,0,1,2,3,4] abs_np = np.abs(abs_template) fabs_np = np.fabs(abs_template)print(abs_template,abs_np,fabs_np)# 算术平方根sqrt_num = 25 sqrt = np.sqrt(sqrt_num)print(sqrt)# 平方square_num = 4 square = np.square(square_num)print(square)# 指数print('指数:') exp_num = 6 exp = np.exp(exp_num)print(exp)# 对数log_2 = np.log2(2) log_10 = np.log10(10) log_20 = np.log(20)print(log_2,log_10,log_20)# 符号函数 (大于0的返回1,小于0的返回-1,0返回0值)sign_over = np.sign(2) sign_below = np.sign(-2) sign_zero = np.sign(0)print(sign_over,sign_below,sign_zero)# 向上取整cell_num = np.ceil(5.4) cell_num2 = np.ceil(-5.4) cell_num3 = np.ceil(-5)print(cell_num,cell_num2,cell_num3)# 向下取整floor_num1 = np.floor(5.6) floor_num2 = np.floor(5.4) floor_num3 = np.floor(-5.6)print(floor_num1,floor_num2,floor_num3)# 返回最近的整数rint_num1 = np.rint(5.6) rint_num2 = np.rint(5.2)print(rint_num1,rint_num2)# 判断是否缺失print('是否缺失') isnan_num = np.isnan((2,3,-1,1))print(isnan_num)# 判断是否无限:isfinite (有限:isinf)isfinite_num = np.isfinite(np.math.log10(2))print(isfinite_num) isinf_num = np.isinf(np.math.log(2,4))print(isinf_num)# 幂运算power_num = np.power(2,3)print(power_num)# 余数运算mod_num1 = np.mod(10,2) mod_num2 = np.mod([12,14],3)print(mod_num1,mod_num2)
数学函数
(四)统计函数
余数运算,最大/小值,浮点最大/小值,求和,均值,标准差,方差,中位数
print('统计函数:')# 最大值arr_1 = [23,2344,435,54,66,7,99] max_num = np.max(arr_1)print(max_num)# 浮点数最大值fmax_num = np.fmax([1,4,9],[0,5,10])print(fmax_num)# 最小值min_num = np.min(arr_1)print(min_num)# 浮点数的最小值(此处的比值为两个list集合一一对应进行比较,可查看numpy官方文档)fmin_num = np.fmin([2,3,4],[1,5,3])print(fmin_num)# 求和sum_num = np.sum([2,3,4,5])print(sum_num)# 均值mean_num = np.mean([2,2,3,3,4,4])print(mean_num)# 标准差:样本平均数方差的开平方#(两组数据平均值都相同的话,这时候标准差大的数据反而不好)# 标准差是方差的算术平方根std_num = np.std([2,2,3,3,4,4]) std_num2 = np.std([1,2,0,6,4,5])print(std_num,std_num2)# 方差var_num = np.var([2,2,3,3,4,4]) var_num2 = np.var([1,2,0,6,4,5])print(var_num,var_num2)# 中位数:为奇数个时,X(n+1)/2 偶数个时:(X(n/2) + X(n/2+1))/2median_num = np.median([2,2,3,3,4,4,5,5]) median_num2 = np.median([1,2,0,6,4,5])print(median_num,median_num2)
统计函数
(五)映射函数
# 映射函数 apply_along_axisprint('****************** 映射函数开始 *********************') arr3 = np.array([[1,2,3,4],[5,6,7,8],[3,4,5,6]])print(arr3,'\n')# 对矩阵的每一行计算均值mean_arrays = np.apply_along_axis(func1d=np.mean,axis=1,arr=arr3)print(mean_arrays,'\n')# 对矩阵的每一行进行求和计算sum_arrays = np.apply_along_axis(func1d=np.sum,axis=1,arr=arr3)print(sum_arrays,'\n')
映射函数
(六)离散与连续分布
""" 随机数生成(常用的分布随机数):离散分布,连续分布 1 离散分布:二项分布,泊松分布 2 连续分布:正态分布(高斯分布),其他常用分布 """# (一)二项分布 是n个独立的是/非试验中成功的次数的离散概率分布# 设置随机种子,保证每次运行都出现相同的随机数np.random.seed(123)# 二项分布r1 = np.random.binomial(n=10,p=0.2,size=20) print(len(r1)) print(r1,'\n') r2 = np.random.binomial(n=10,p=0.2,size=(3,5)) print(r2,'\n')# 泊松分布(单位时间内随机事件发生的次数)# 保证每次运行都会出现相同的随机数np.random.seed(1) poisson1 = np.random.poisson(lam=6,size=10) print(poisson1,'\n') poisson2 = np.random.poisson(lam=(10,50,20),size=(5,3))#lamda参数分别取10,50,20,表示单位时间内某件事发生的频次print(poisson2,'\n')# (二) 连续分布# (1)正态分布# 均值为2,标准差为3normal = np.random.normal(loc=2,scale=3,size=10) print(normal,'\n') normal2 = np.random.normal(loc=2,scale=3,size=(3,5)) print(normal2)# 其他分布(t分布,f分布,均匀分布,这里暂时不举例)
离散与连续分布
(七)数据加载与导出
# numpy模块数据加载print('##################### numpy 模块数据加载 #####################')# 数据写入""" name:指定外部文件的路径 delimiter:指定文件中数据列的分隔符 skiprows:指定读数时跳过的行数 skip_header:指定跳过首行 usecols:指定读取的数据列 """data_txt = np.loadtxt(fname='loadtxt.txt',delimiter=',',skiprows=1)# 推荐第二种data_txt2 = np.genfromtxt(fname='loadtxt.txt',delimiter=',',skip_header=1,usecols=[0,2]) print(data_txt,'\n') print(data_txt2,'\n')# 数据写出""" fname:指定数据写出的路径 X:指定需要写出的数据 fmt:指定输出数据的格式,默认科学计算法 delimiter:指定数据列之间的分隔符,默认空格符 newline:指定新行的标识符,默认换行 header:指定输出数据首行值 footer:指定输出数据的末行值 comments:指定注释符,默认“#” """input_data = '要写出的数据'np.savetxt(fname='F:data.txt',X=input_data,fmt='%.18e',delimiter=' ',newline='\n',header='',footer='',comments='#')
这里建议先收藏,留着以后空闲时间进行练习,或者在使用NumPy的时候进行翻阅,PS:我练习这个练习了一个下午,所以文章有些长,代码里面的注释已经很详细了,就暂时不过多的写注释了。
作者:徐代龙
链接:https://www.jianshu.com/p/f2cc1e41f214
共同学习,写下你的评论
评论加载中...
作者其他优质文章