3.1 对数值进行取整
round(value,digit)
其中,digit可以为负数。
3.2 执行精确的小数计算
去除浮点类型天生的误差,获得更高的精度,可以使用Decimal模块。
from decimal import Decimal
a=Decimal('4.2')
b=Decimal('4.4')
print(a+b)
Decimal模块可以修改位数,四舍五入。
具体可以创建一个上下文环境,然后修改。
with localcontext() as ctx:
ctx.prec=3
这个模块应该需要的不多,它对性能影响较大。一般使用float就可以。
3.3 对数值做格式化输出
可以使用format()函数。
3.4 同二进制、八进制、十六进制打交道
使用bin(),oct(),hex()三个内建函数就可以。
3.5 从字节串中打包和解包大整数
使用int.from_bytes()解包,使用int.to_bytes()打包。
3.6 复数运算
复数可以通过Complex()或者j来指定。
a=Complex(2,4)
b=1+5j
可以提取实部虚部共轭值。
a.real()
a.imag()
a.conjugate()
常见算术运算都适用于复数,函数操作要使用cmath模块。
3.7 处理无穷大和NaN
创建:
a=float('inf')
b=float('-inf')
c=float('nan')
检测可以使用math.isnan()和math.isinf()函数。
inf和nan在计算中会传播,而且不会报错。
两个NaN的数字,不会相等。
3.8 分数的计算
使用fractions模块。
from fractions import Fraction
a=Fraction(5,4)
print(a)
3.9 处理大型数组的计算
请使用Numpy库,库中的通用函数效率非常好。
import numpy as np
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a[1:3,1:3])
[[ 6 7]
[10 11]]
注意,数组下标从零开始,前包后不包。
3.10 矩阵和线性代数的计算
使用Matrix对象。两个对象相乘为矩阵相乘(array为元素依次相乘)。
import numpy as np
import numpy.linalg
m=np.matrix([[1,2,3],[5,6,7],[9,10,11]])
print(m.T)
print(m.I)
print(numpy.linalg.det(m))
print(numpy.linalg.eigvals(m))
v=np.matrix([[1,2,3]])
print(numpy.linalg.solve(m, v.T))
[[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
[[ 5.00399959e+14 -1.00079992e+15 5.00399959e+14]
[ -1.00079992e+15 2.00159983e+15 -1.00079992e+15]
[ 5.00399959e+14 -1.00079992e+15 5.00399959e+14]]
-7.9936057773e-15
[ 1.92469508e+01 -1.24695077e+00 1.34669561e-15]
[[-0.22222222]
[ 0.19444444]
[ 0.27777778]]
3.11 随机选择
#-*- coding:utf-8 -*-
import random
values=[1,2,3,4,5]
#随机选出元素
print(random.choice(values))
#随机选n个
print(random.sample(values,3))
#洗牌
random.shuffle(values)
print(values)
#产生随机整数
print(random.randint(0,10))
#0~1均匀分布浮点数
print(random.random())
#n个随机比特位表示的整数
print(random.getrandbits(10))