python: namedtuple使用; numpy保留两位小数

前言

出差了一周,现在记录一下出差前写码的两个python tricks。

numpy保留两位小数

python内置的保留小数位数的函数是round(a, b)a数据(只能是数字),b位数;
numpy提供的保留小数位数的函数是是np.around(a, b)a数据(可以是list, array等),b位数。

这俩函数都保留b位有效数字,如np.around(6.543, 2) >> 6.54,但是位数不够时不会补零,如np.around(6.5, 2) >> 6.5

此外这两个保留方法都是四舍五入的,比较特殊的是np.around(6.545, 2) >> 6.54np.around(6.54501, 2) >> 6.55,这有可能是因为6.545在内存上的值实际为6.54499999999999

namedtuple使用

本篇的重点在于namedtuple命名元组的使用。python内置的元组tuple类型,元素是无名且值是不能修改的。

比如四元数的应用,如果使用内置元组,则可能出现(x, y, z, w)或者(w, x, y, z)两种排列方式(w是实部),不提前约定就容易出现混淆。于是命名元组就完美解决了这个问题。

我们可以把命名元组看作一个只有属性,没有方法的类:

def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)

其中,typename表示该元组的类名,field_names表示元组的属性名(各元素的名字),如果元素名字与python内置名重复,必须设置rename=True

下面是使用方法:

import collections
# 创建一个命名元组类
student = collections.namedtuple('Student', ['name', 'age'])
# 创建Student命名元组的对象
peter = student('peter', 19)
print(peter) # student(name='peter', age=19)
print(peter[0]) # 'peter'
print(peter.name) # 'peter'
print(peter.age) # 19

可以看到,命名元组的对象可以通过常规元组素引或者类属性的方法获取元素值。

此外,命名元组类有一些内置的方法:

# 替换某个元素,注意这里是生成新的一个元组对象,旧元组的元素没有改变
peter_ = peter._replace(age=18)
print(peter_) # student(name='peter', age=18)
print(peter) # student(name='peter', age=19) 

# 转换为字典
peter_d = peter._asdict()
print(peter_d) # {'name': 'peter', 'age': 19}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐