标注库学习(cmath,gc,math)
因为最近要用一下maix_bit,所以今天开始学一下micro python。学之前我看了下其他板子上用的micro python的语法,发现每个板子上的语法都不大一样,所以我接下来的写的都是适用于maix_bit(用的是K210芯片)这块板子的micro python语法,其他的板子可能并不适用。
学的方法是按着官网给的教程开始学的。官网链接
下面是学习的顺序:
- 标准库
- machine
- Maix
- 内置类
- 机器视觉
- 外设模块
- 内置应用
因为第一章学的是标准库,也用不上什么引脚之类的东西,所以板子的引脚图就先不放,等下一个模块再往上放。
一.cmath
就是一些常用数学函数的使用,包括三角函数,对数,指数,平方根,复数……
1.函数
1.1 cos sin
返回z的余弦值, 正弦值。
cmath.cos(z)
cmath.sin(z)
1.2 exp
返回z的指数。
cmath.exp(z)
1.3 log
返回z的自然对数,也就是以e为底的对数。
cmath.log(z)
1.4 log10
返回z以10为底的对数。
cmath.log10(z)
1.5 phase
返回z的相位,范围(-pi,+pi)。
cmath.phase(z)
1.6 polar
作为元组返回z的极性方式。
cmath.polar(z)
1.7 rect
返回 模数为r,相位为phi 的复数。
cmath.rect(r,phi)
1.8 sqrt
返回z的平方根。
cmath.sqrt(z)
2.常量(Constants)
自然对数e,圆里用的pi
cmath.e
cmath.pi
看完了就用一下:
import cmath
print(cmath.cos(100),cmath.sin(100),cmath.exp(2),cmath.log(100),cmath.sqrt(100))
print("\n")
print(cmath.log10(100),cmath.phase(100),cmath.polar(10),cmath.rect(10,10))
print('\n')
print(cmath.e,cmath.pi)
效果是:
(0.8623189+0j) (-0.5063657+0j) (7.389056+0j) (4.60517+0j) (10+0j)
(2+0j) 0.0 (10.0, 0.0) (-8.390715-5.440211j)
2.718282 3.141593
效果上返回的值都是复数类型;三角函数里输入的是那种和pi有关的值(也就是弧度制),不是角度值;相位指的是复数值走过的角度;极性我没搞太懂,不过如果是实数就返回0,输入复数就返回一个浮点数。
二.gc-控制垃圾收集器
个人大概的理解就是这个库里的函数大致有三个作用:
1.可以收集被删除掉的元素的值(分自动和手动)
2.查看堆RAM的值
3.可以在内存占的太多的时候给一个触发
#启动自动垃圾回收
gc.enable()
#禁止自动垃圾回收,仍可以分配堆内存,并用gc.collect()手动收集垃圾
gc.disable()
#垃圾回收(手动的那种)
gc.collect()
#返回分配的堆RAM的字节数(是MicroPython的扩展)
gc.mem_alloc()
#返回可用堆RAM的字节数,如果堆剩余数量未知,则返回-1(是MicroPython的扩展)
gc.mem_free()
#通过分配阈值amount,到达阈值时触发集合。一般情况下是内存不足的时候触发集合,加了个阈值可以提前触发。
#如果不加amount的话,返回的是当前阈值的值。
gc.threshold([amount])
也是大概用一下,用一下这个内存的操作:
import gc
gc.enable()
print(gc.mem_alloc(),gc.mem_free())
a=10
print(gc.mem_alloc(),gc.mem_free())
b=[10,10,10,10,10]
print(gc.mem_alloc(),gc.mem_free())
效果是:
58944 459200
58944 459200
59040 459104
用是不怎么会用,大概的意思还是可以看懂的,每当新建立一个占内存足够大的变量时,系统的内存就会少一些。
三.math-数学函数
也是一些数学函数,可以当作cmath的一个补充,按官网来说,这是个处理浮点数据的数学库(cmath库返回的是复数,这个库返回的是浮点数)。这个库就是个数学函数的集合,看一遍有个印象就可以了,以后用到了来复制一下就差不多。
#余弦 正弦 正切
math.cos(x)
math.sin(x)
math.tan(x)
#双曲余弦 双曲正弦 双曲正切
math.cosh(x)
math.sinh(x)
math.tanh(x)
#反余弦 反正弦 反正切
math.acos(x)
math.asin(x)
math.atan(x)
#反双曲余弦 反双曲正弦 反双曲正切
math.acosh(x)
math.asinh(x)
#返回y/x的反正切的主值
math.atan2(y,x)
#四舍五入的整数
math.ceil(x)
#返回x向负无穷大的舍入
math.floor(x)
#返回一个整数,“x”向0舍入
math.trunc(x)
#以y的符号返回x(y是负数就返回-x,正数就返回x)
math.copysign(x,y)
#弧度x转换度数 度数x转换为弧度
math.degrees(x)
math.radians(x)
#x的错误函数
math.erf(x)
#x的互补误差函数,有erf(x)+erfc(x)=1。
math.erfc(x)
#返回x的指数
math.exp(x)
#返回exp(x)-1
math.expm1(x)
#x的自然对数
math.log(x)
#x的以10为底的对数
math.log10(x)
#x的base-2对数
math.log2(x)
#返回绝对值
math.fabs(x)
#返回x/y的余数
math.fmod(x,y)
#返回浮点数分解的尾数和指数
math.frexp(x)
#返回x的分数部分和整数部分
math.modf(x)
#返回x的伽玛函数(阶乘) 返回x的伽玛函数的自然对数
math.gamma(x)
math.lgamma(x)
#返回x*(2**exp)
math.ldexp(x, exp)
#x的y次方
math.pow(x, y)
#如果x是有限的,则返回True
math.isfinite(x)
#如果x是无限的,则返回True
math.isinf(x)
#如果x不是数字,则返回True
math.isnan(x)
挑几个比较不常见的函数试一下效果:
import math
print(math.atan2(2,1))
print(math.ceil(4.7))
print(math.copysign(2,-1))
print(math.expm1(2))
print(math.floor(2.5))
print(math.frexp(2.5))
print(math.ldexp(2,1))
print(math.log2(4))
print(math.gamma(4))
print(math.modf(2.5))
效果:
1.107149
5
-2.0
6.389056
2
(0.625, 2)
4.0
2.0
6.0
(0.5, 2.0)
总结一下
1.三角函数就是正常的sin,cos,tan什么的,反三角就是前面加个a,双曲三角就是后面加个h。
2.伽马函数就是阶乘函数。
3.这个里面返回的是浮点数,cmath那个库返回的都是复数。
第一篇写了标准库里的cmath,gc,math三个库,标准库里还剩十多个库,下一篇继续写,然后在下一篇里介绍一下我烧录程序的方法。