Python的常用库的数组定义及常用操作
好奇心Log 今天
以下文章来源于阿宗的科研备忘 ,作者阿宗的科研备忘
Python支持的库非常多,这当然是它的一大优势,但是也会给我们实际应用中造成点小小的麻烦:每个库对于数据的定义和运算处理都不同,这就使得我们在写代码的时候经常会串掉,比如会一个手滑写成numpy.xarray,又或者是想将两个数组元素相加,却没注意到它们都是list(列表),写成了list1+list2,结果变成了两个列表的合并。。。
或许你会说,那我直接用一个库,比如就用numpy不就好了。但是我们在实际处理气象上常见的nc数据时,还是离不开xarray、pandas、netCDF4,这些常用库的。由于我自己也总是记混,经常debug到写过格式的情况,这里就索性把它们都写下来做一个备忘吧~
1、numpy库
import numpy as npa = [1, 2, 3] # 创建数组b = np.array(a) # 将a转为array格式c = np.ones([3,5],dtype=np.int) # 创建数值为1的,维度为3×5的整形数组d = np.zeros([3,5],dtype=np.int) # 创建数值为0的,维度为3×5的整形数e = np.full([3,5],5,dtype=np.int) # 创建数值为5(该数值为人工指定)的,维度为3×5的整形f = np.eye(5) # 创建维度为5的方阵g = np.random.rand(5,6,7) # 创建shape为(5,6,7)的数组,数值范围在0-1之间的随机数h = np.random.uniform(0, 100, size=(5,6)) # 创建shape为(5,6)的数组,数值范围在0-100之间的随机数i = np.random.randint(0, 100, size=(5,6)) # 创建shape为(5,6)的整形数组,数值范围在0-100之间的随机整数j = np.arange(5,100,10) # 创建一个从5开始,间隔为10,结束于小于100的等差数列k = np.linspace(5,100,50) # 创建50个在闭区间[5,100]内均匀分布的值k2 = np.expand_dims(c,axis=0) # 在数组k的最左侧增加一个维度k3 = np.expand_dims(c,axis=-1) # 在数组k的最右侧增加一个维度k4 = np.expand_dims(c,axis=2) # 在数组k的index=2处增加一个维度k5 = k % 3 # 求除以3的余数np.sort(array_name) # 数组整体排序np.sort(array_name,axis=0) # 数组仅对行排序np.sort(array_name,axis=1) # 数组仅对列排序l = c[:2,2:4].copy() # 数组索引后复制。也可写作np.copy()np.unique(array_name) # 提取唯一元素array_name.T # 数组转置array_name.reshape(3,2,2) # 改变数组形状,新shape的各维度相乘应与旧的相等,不想算的可以用-1表示array_name.resize(3,2,2) # 改变数组形状,新shape的各维度相乘可以不与旧的相等,不足的补0np.where(condition,x,y) # 条件运算,数组中符合条件condition的更改为数值x,不符合的改为yresult = np.amax(array_name,axis=0) # 求矩阵中每一列的最大值。axis=1表示按照行来求。整个矩阵求最大值的话,不用谢axis参数np.amin(array_name) # 求矩阵最小值。参数含义同np.amaxnp.mean(array_name,dtype=np.int) # 求矩阵平均值。参数含义同np.amaxnp.std(array_name) # 求矩阵方差。参数含义同np.amaxresult = np.vstack(v1,v2) # 两个列数相同的矩阵v1和v2的拼接result = np.hstack(v1,v2) # 两个行数相同的矩阵v1和v2的拼接result = np.append(array_name, [0, 2]) # 末尾添加元素result = np.append(array_name, [[0, 2, 11]], axis=0) # 最后一行添加一行result = np.append(array_name,[[0], [2], [11]], axis=1) # 最后一列添加一列(注意添加元素格式)result = np.insert(array_name, 1, [[11, 12, 10]], axis=0) # 在索引位置为1的位置插入一行result = np.insert(array_name, 1, [[11, 12, 10]], axis=1) # # 在索引位置为1的位置插入一列np.load(fname,dtype,comments='#',delimiter=None,skiprows=0,usecols=None)# 其中,fname:读取的文件、文件名;dtype:数据类型;comments:注释;delimiter:分隔符,默认是空格# skiprows:跳过前几行读取,默认是0;usecols:读取哪些列,usecols=(1, 2, 5)读取第1,2,5列,默认所有列
2、xarray库
import xarray as xrdata = xr.open_dataset(file_name) # 读取nc文件t2m = data['t2m'] # 从data中提取所需变量xr.concat([data2018, data2019], dim='time') # 维度拼接xr.merge([data2018.u10, data2019.t2m]) # 变量合并data.mean(dim=['latitude', 'longitude']) # 对经纬度进行平均data.std(dim='time') # 对时间维度求方差data.groupby('time.season').min(dim='time') # 月平均转季节数据data.groupby('time.year').min(dim='time') # 月平均转年数据
3、Pandas库
import pandas as pddata = pd.DataFrame() # 定义一个空的DataFrame格式数据data['增加的维度'] = np.array格式的数据 # 向data中添加数据。也可以直接定义好,如下:data = pd.DataFrame({"实况降水":np.array(pre_obs), "IR39":np.array(b07), "IR62":np.array(b08), "IR70":np.array(b09), "IR73":np.array(b10)})
4、列表
import numpy as npa_list = [] # 定义一个空列表a_list.append() # 在列表最后添加元素a_list = [str(i)+'元素' for i in range(10)] # 用循环的形式为列表赋值list1+list2 # 列表合并,等价于list1.extend(list2)a_array = np.array(a_list) # 将列表转为array格式
不看的原因确定内容质量低不看此公众号
赞 (0)