本文目录一览:
python常用函数
- complex()
返回一个形如
a+bj
的复数,传入参数分为三种情况:- 参数为空时,返回
0j
; - 参数为字符串时,将字符串表达式解释为复数形式并返回;
- 参数为两个整数
(a,b)
时,返回a+bj
; - 参数只有一个整数
a
时,虚部b
默认为0
,函数返回a+0j
。
- 参数为空时,返回
- dir()
- 不提供参数时,返回当前本地范围内的名称列表;
- 提供一个参数时,返回该对象包含的全部属性。
- divmod(a,b)
a
-- 代表被除数,整数或浮点数;b
-- 代表除数,整数或浮点数;- 根据除法运算计算
a,b
之间的商和余数,函数返回一个元组(p,q)
,p
代表商a//b
,q
代表余数a%b
。
- enumerate(iterable, start=0)
iterable
-- 一个可迭代对象,如列表、元组等;start
-- 计数索引值,默认初始为0
;- 该函数返回枚举对象是一个迭代器,利用
next()
方法依次返回元素值,每个元素以元组形式存在,包含一个计数元素(起始为start
)和iterable
中对应的元素值。
Python气象数据处理与绘图(2):常用数据计算方法
对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据。
按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数:
在计算气候态、区域平均时均要使用到求均值函数,对应 NCL 中的 dim_average
函数,在 Python 中通常使用 np.mean()
函数:
numpy.mean(a, axis, dtype)
假设 a
为 [time,lat,lon]
的数据,那么:
需要特别注意的是,气象数据中常有缺测,在 NCL 中,使用求均值函数会自动略过,而在 Python 中,当任意一数与缺测 (np.nan
) 计算的结果均为 np.nan
,比如求 [1,2,3,4, np.nan]
的平均值,结果为 np.nan
。
因此,当数据存在缺测数据时,通常使用 np.nanmean()
函数,用法同上,此时 [1,2,3,4, np.nan]
的平均值为 (1+2+3+4)/4 = 2.5
。
同样的,求某数组最大最小值时也有 np.nanmax()
、np.nanmin()
函数来补充 np.max()
、np.min()
的不足。
其他很多 np
的计算函数也可以通过在前边加 nan
来使用。
另外,也可以直接将 a
中缺失值全部填充为 0
。
np.std(a, axis, dtype)
用法同 np.mean()
。
在 NCL 中有直接求数据标准化的函数 dim_standardize()
,其实也就是一行的事,根据需要指定维度即可。
皮尔逊相关系数
相关可以说是气象科研中最常用的方法之一了,numpy
函数中的 np.corrcoef(x, y)
就可以实现相关计算。但是在这里我推荐 scipy.stats
中的函数来计算相关系数:
这个函数缺点和优点都很明显,优点是可以直接返回相关系数 R
及其 P
值,这避免了我们进一步计算置信度。而缺点则是该函数只支持两个一维数组的计算,也就是说当我们需要计算一个场和一个序列的相关时,我们需要循环来实现。
其中 a[time,lat,lon]
,b[time]
,(NCL 中为 regcoef()
函数)。
同样推荐 Scipy
库中的 stats.linregress(x,y)
函数:
slope
: 回归斜率intercept
: 回归截距r_value
: 相关系数p_value
:P
值std_err
: 估计标准误差 直接可以输出P
值,同样省去了做置信度检验的过程,遗憾的是仍需同相关系数一样循环计算。
python三个重要的内置函数(map, filter, reduce)
map
map
函数第一个参数是一个函数 function
,第二个参数是一个可迭代的对象 iterable
,它的功能是将可迭代对象 iterable
里面的每一项都应用到函数 function
中,然后返回一个迭代器。
可迭代器里面有多少个元素则结果就包含多少个元素。
filter
filter()
函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True
或 False
,最后将返回 True
的元素放到新列表中。
reduce
reduce()
函数会对参数序列中的元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce
中的函数 function
(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function
函数运算,最后得到一个结果。
python字典操作函数
字典是一种通过名字或者关键字引用的数据结构,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是 Python 中唯一内建的映射类型,基本的操作包括如下:
len()
:返回字典中键—值对的数量;d[k]
:返回关键字对应的值;d[k]=v
:将值关联到键值k
上;del d[k]
:删除键值为k
的项;key in d
:键值key
是否在d
中,是返回True
,否则返回False
;clear()
:清除字典中的所有项;copy()
:返回一个具有相同键值的新字典;deepcopy()
使用深复制,复制其包含所有的值,这个方法可以解决由于副本修改而使原始字典也变化的问题;fromkeys()
:使用给定的键建立新的字典,键默认对应的值为None
;get()
:访问字典成员;has_key()
:检查字典中是否含有给出的键;items()
和iteritems()
:items()
将所有的字典项以列表方式返回,列表中项来自(键,值),iteritems()
与items()
作用相似,但是返回的是一个迭代器对象而不是列表;keys()
和iterkeys()
:keys()
将字典中的键以列表形式返回,iterkeys()
返回键的迭代器;pop()
:删除字典中对应的键;popitem()
:移出字典中的项;setdefault()
:类似于get
方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值;update()
:用一个字典更新另外一个字典;values()
和itervalues()
:values()
以列表的形式返回字典中的值,itervalues()
返回值的迭代器,由于在字典中值不是唯一的,所以列表中可以包含重复的元素。
一、字典的创建
1.1 直接创建字典
d = {'one':1, 'two':2, 'three':3}
print(d)
print(d['two'])
print(d['three'])
运算结果:
{'three': 3, 'two': 2, 'one': 1}
1.2 通过 dict
创建字典
items = [('one',1), ('two',2), ('three',3), ('four',4)]
d = dict(items)
print(d)
print(d['one'])
print(d['three'])
运算结果:
{'four': 4, 'three': 3, 'two': 2, 'one': 1}
或者通过关键字创建字典:
d = dict(one=1, two=2, three=3)
print(d)
print(d['one'])
print(d['three'])
运算结果:
{'three': 3, 'two': 2, 'one': 1}
二、字典的格式化字符串
d = {'one':1, 'two':2, 'three':3, 'four':4}
print(d)
print("three is %(three)s." % d)
运算结果:
{'four': 4, 'three': 3, 'two': 2, 'one': 1}
three is 3.
三、字典方法
3.1 clear()
:清除字典中的所有项
d = {'one':1, 'two':2, 'three':3, 'four':4}
print(d)
d.clear()
print(d)
运算结果:
{'four': 4, 'three': 3, 'two': 2, 'one': 1}
{}
3.2 copy()
:返回一个具有相同键值的新字典
x = {'one':1, 'two':2, 'three':3, 'test':['a','b','c']}
y = x.copy()
y['three'] = 33
print(y)
print(x)
运算结果:
{'test': ['a', 'b', 'c'], 'one': 1, 'three': 33, 'two': 2}
{'test': ['a', 'b', 'c'], 'three': 3, 'two': 2, 'one': 1}
注:在复制的副本中对值进行替换后,对原来的字典不产生影响,但是如果修改了副本,原始的字典也会被修改。deepcopy()
使用深复制,复制其包含所有的值,这个方法可以解决由于副本修改而使原始字典也变化的问题。
3.3 fromkeys()
:使用给定的键建立新的字典,键默认对应的值为 None
d = dict.fromkeys(['one', 'two', 'three'])
print(d)
运算结果:
{'three': None, 'two': None, 'one': None}
或者指定默认的对应值:
d = dict.fromkeys(['one', 'two', 'three'], 'unknow')
print(d)
运算结果:
{'three': 'unknow', 'two': 'unknow', 'one': 'unknow'}
3.4 get()
:访问字典成员
d = {'one':1, 'two':2, 'three':3}
print(d.get('one'))
print(d.get('four'))
运算结果:
1
None
注:get()
函数可以访问字典中不存在的键,当该键不存在时返回 None
。
3.5 has_key()
:检查字典中是否含有给出的键
d = {'one':1, 'two':2, 'three':3}
print(d.has_key('one'))
print(d.has_key('four'))
运算结果:
True
False
3.6 items()
和 iteritems()
:items()
将所有的字典项以列表方式返回,列表中项来自(键,值),iteritems()
与 items()
作用相似,但是返回的是一个迭代器对象而不是列表
d = {'one':1, 'two':2, 'three':3}
list = d.items()
for key, value in list:
print(key, ':', value)
运算结果:
three : 3
two : 2
one : 1
3.7 keys()
和 iterkeys()
:keys()
将字典中的键以列表形式返回,iterkeys()
返回键的迭代器
d = {'one':1, 'two':2, 'three':3}
print(d.keys())
for x in d.iterkeys():
print(x)
运算结果:
['three', 'two', 'one']
three
two
one
3.8 pop()
:删除字典中对应的键
d = {'one':1, 'two':2, 'three':3}
print(d)
d.pop('one')
print(d)
运算结果:
{'three': 3, 'two': 2, 'one': 1}
{'three': 3, 'two': 2}
3.9 popitem()
:移出字典中的项
d = {'one':1, 'two':2, 'three':3}
print(d)
d.popitem()
print(d)
运算结果:
{'three': 3, 'two': 2, 'one': 1}
{'two': 2, 'one': 1}
3.10 setdefault()
:类似于 get
方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值
d = {'one':1, 'two':2, 'three':3}
print(d.setdefault('one', 1))
print(d.setdefault('four', 4))
print(d)
运算结果:
1
4
{'four': 4, 'three': 3, 'two': 2, 'one': 1}
3.11 update()
:用一个字典更新另外一个字典
d = {'one':123, 'two':2, 'three':3}
x = {'one':1}
d.update(x)
print(d)
运算结果:
{'three': 3, 'two': 2, 'one': 1}
3.12 values()
和 itervalues()
:values()
以列表的形式返回字典中的值,itervalues()
返回值的迭代器,由于在字典中值不是唯一的,所以列表中可以包含重复的元素
d = {'one':123, 'two':2, 'three':3, 'test':2}
print(d.values())
运算结果:
[2, 3, 2, 123]