对数(logarithm)
认识对数函数
指数
对数log
对数函数是指数函数的反函数。
如果对数log的底数是10,这是常用对数,使用log数学公式表达时,常常会省略10。
建立的对数表,其中真数x是1.1~10.0。
import numpy as np
n = np.linspace(1.1, 10, 90) # 建立1.1-10的数组
count = 0 # 用于计算每5笔输出换行
for i in n:
count += 1
print('{0:2.1f} = {1:4.3f}'.format(i, np.log10(i)), end=' ')
if count % 5 == 0: # 每5笔输出就换行
print()
运行结果如下:
[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
1.1 = 0.041 1.2 = 0.079 1.3 = 0.114 1.4 = 0.146 1.5 = 0.176
1.6 = 0.204 1.7 = 0.230 1.8 = 0.255 1.9 = 0.279 2.0 = 0.301
2.1 = 0.322 2.2 = 0.342 2.3 = 0.362 2.4 = 0.380 2.5 = 0.398
2.6 = 0.415 2.7 = 0.431 2.8 = 0.447 2.9 = 0.462 3.0 = 0.477
3.1 = 0.491 3.2 = 0.505 3.3 = 0.519 3.4 = 0.531 3.5 = 0.544
3.6 = 0.556 3.7 = 0.568 3.8 = 0.580 3.9 = 0.591 4.0 = 0.602
4.1 = 0.613 4.2 = 0.623 4.3 = 0.633 4.4 = 0.643 4.5 = 0.653
4.6 = 0.663 4.7 = 0.672 4.8 = 0.681 4.9 = 0.690 5.0 = 0.699
5.1 = 0.708 5.2 = 0.716 5.3 = 0.724 5.4 = 0.732 5.5 = 0.740
5.6 = 0.748 5.7 = 0.756 5.8 = 0.763 5.9 = 0.771 6.0 = 0.778
6.1 = 0.785 6.2 = 0.792 6.3 = 0.799 6.4 = 0.806 6.5 = 0.813
6.6 = 0.820 6.7 = 0.826 6.8 = 0.833 6.9 = 0.839 7.0 = 0.845
7.1 = 0.851 7.2 = 0.857 7.3 = 0.863 7.4 = 0.869 7.5 = 0.875
7.6 = 0.881 7.7 = 0.886 7.8 = 0.892 7.9 = 0.898 8.0 = 0.903
8.1 = 0.908 8.2 = 0.914 8.3 = 0.919 8.4 = 0.924 8.5 = 0.929
8.6 = 0.934 8.7 = 0.940 8.8 = 0.944 8.9 = 0.949 9.0 = 0.954
9.1 = 0.959 9.2 = 0.964 9.3 = 0.968 9.4 = 0.973 9.5 = 0.978
9.6 = 0.982 9.7 = 0.987 9.8 = 0.991 9.9 = 0.996 10.0 = 1.000
[Done] exited with code=0 in 4.013 seconds
对数表的功能
有一块3平方米的土地,究竟边长是多少?
3大概是10的0.477次方
>>> import math
>>> math.sqrt(3)
1.7320508075688772
>>>
对数运算可以解决指数运算的问题
540天的秒数,可以用10的多少次方表达?
n=7,m=9
540天秒数
>>> pow(10,7.668)
46558609.35229591
>>> 540*24*60*60
46656000
>>>
x=6,b=10
=0.778
540天秒数=
认识对数的特性
处理比较大的数据运算时,使用对数可以有比较好的运算方法,可以节省运算时间,这一点对于机器学习是很有帮助的。
将对数的底数设为2与0.5,将真数的值设为0.1~10,然后绘制图表。
import matplotlib.pyplot as plt
import numpy as np
import math
x1 = np.linspace(0.1, 10, 99) # 建立含30个元素的数组
x2 = np.linspace(0.1, 10, 99) # 建立含30个元素的数组
y1 = [math.log2(x) for x in x1]
y2 = [math.log(x, 0.5) for x in x2]
plt.plot(x1, y1, label="base = 2")
plt.plot(x2, y2, label="base = 0.5")
plt.legend(loc="best") # 建立图例
plt.axis([0, 10, -5, 5])
plt.grid()
plt.show()
执行结果:
对于底数是2的对数函数,如果真数大于1,会呈现正值同时递增,如果真数小于1,会呈现负值,当真数接近0时,则呈现无限小。
对于底数是0.5的对数函数,如果真数大于1,会呈现负值同时递减,如果真数小于1,会呈现正值,当真数接近0时,则呈现无穷大。
另外,当真数是1时,不论底数是多少,对数函数会通过(1,0)。
对数的运算规则与验证
等号两边使用对数处理结果不变
有一个公式:x=y
两边使用对数处理,可以得到相同的结果:
假设f(x)=x,f(y)=y,其实只是将函数转成对数函数。
对数的真数是1
如果对数的真数是1,不论底数b是多少,结果是0:
两边用对数处理:
对数的底数等于真数
对数的底数等于真数时概念如下:
对数内真数的指数
概念如下:
等号两边执行对数运算,可以得到下列结果:
对数内真数是两数据相乘
概念如下:
假设,则上述公式可以推导下列结果。
对数内真数是两数据相除
概念如下:
底数变换
概念如下:
假设