ndarray数组运算
数组函数运算
import numpy as np
数组和数值做运算
a = np.array([[1, 2, 3], [4, 5, 6]])
a
array([[1, 2, 3],
[4, 5, 6]])
a + 10
a - 10
a * 10
a / 10
array([[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6]])
a // 5 # 取整
a % 5 # 取余
array([[1, 2, 3],
[4, 0, 1]], dtype=int32)
a ** 2 # 平方
a ** 3 # 三次方
a ** 1/2 # 根号2
a ** 1/3 # 根号3
array([[0.33333333, 0.66666667, 1. ],
[1.33333333, 1.66666667, 2. ]])
数组间运算
数组间运算会自动对应相应位置的值计算
a1 = np.array([[1, 2, 3], [4, 5, 6]])
a2 = np.array([1,2,3])
a1
array([[1, 2, 3],
[4, 5, 6]])
a2
array([1, 2, 3])
a1 + a2
array([[2, 4, 6],
[5, 7, 9]])
并不是所有数据形状都可以广播,无法广播计算会出错
a2
array([1, 2, 3])
b2 = np.array([1, 2])
b2
array([1, 2])
# a2 + b2 # 报错
数组函数运算
- 函数 描述
- abs 绝对值
- sqrt 平方根,等价于 arr ** 0.5
- square 平方,等价于 arr ** 2
- logical_not 计算各元素not x的真值,True变False,False变True
- sign 计算每个元素的符号:,1(正数),0(零),-1(负数)
- modf 分别返回小数数和整数部分的数组
- log, log10, log2, log1p 自然对数(底数为e),底数为10的对数,底数为2的对数和 log(1 + x)
- exp 以e为底的指数函数 ex,2.71828 ** x
- cos, cosh, sin sinh, tan, tanh 三角函数,普通型和双曲型
- arccos, arccosh, arcsin, arcsinh, arctan, arctanh 反三角函数
c = np.array([1,2,-3,-4])
c
array([ 1, 2, -3, -4])
绝对值
np.abs(c)
array([1, 2, 3, 4])
平方
d = np.square(c)
d
array([ 1, 4, 9, 16], dtype=int32)
平方根
np.sqrt(d)
array([1., 2., 3., 4.])
计算各元素not x的真值,True变False,False变True
c
array([ 1, 2, -3, -4])
c >= 0
~(c >= 0)
np.logical_not(c > 0) # not x的非运算,等价于上面
array([False, False, True, True])
# 布尔查询
c[c > 0]
c[~(c > 0)]
c[np.logical_not(c > 0)]
array([-3, -4])
计算每个元素的符号:,1(正数),0(零),-1(负数)
c
array([ 1, 2, -3, -4])
np.sign(c)
array([ 1, 1, -1, -1])
分别返回小数数和整数部分的数组
c2 = np.array([1.2, 3.4, 5.67, 6])
c2
array([1.2 , 3.4 , 5.67, 6. ])
np.modf(c2)
(array([0.2 , 0.4 , 0.67, 0. ]), array([1., 3., 5., 6.]))
log, log10, log2, log1p 自然对数(底数为e),底数为10的对数,底数为2的对数和 log(1 + x)
对数是指数的逆运算
- 105 = 100000
- log10(100000) = 5
求10的5次方
10 ** 5
100000
求以10为底,100000的对数
np.log10(100000)
5.0
熵
- 热力学熵
- 信息熵
熵:熵反映了一个事物的混乱程度
* 熵越大:事物越混乱,不能预测,意外
* 熵越小:事物有规律
例子:世界杯,32支球队,猜到冠军是谁,最少猜几次
例子:“美女”名词的信息量是多少?
- 50年前,100个人里,1个人叫你美女
- 现在,100个人,50个人叫你美女
美女这个词的信息量变化如何?
‘世界杯法国队夺冠’这句话的信息含量是多少?
# 对足球外行说这句话
# 世界杯法国队
-np.log2(1/32) # 5比特
# 外行猜冠军,没有预备知识,认为所有球队夺冠概率相同
5.0
# 对球迷说这句话
# 球迷知道球队夺冠概率并不相同
-np.log2(1/8)
3.0
# 另外一种情况,巴西队访问中国,中国各省各出一支球队,比赛,结果:法国队赢了
# 告诉球迷
-np.log2(32/32) # 信息量最小
-np.log2(1/32) # 信息量最大
5.0
美女 信息量的变化
-np.log2(1/100)
6.643856189774724
-np.log2(50/100)
1.0