python cookbook:第三章 数字、日期和时间

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))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值