Numpy的常用函数
- 算术平均值 numpy.mean
样本: S = [s1, s2, …, sn]
算术平均值: M = (s1 + s2 + … + sn) / n
我们举个例子
在现实中,我们反复测量一个物体的实际高度可以得到这样一组数据
S = [s1, s2, …, sn]
这组数据围绕着这个物体的实际高度(真值)上下波动
每个数据与真值的差为d
即:
s1 = s + d1
s2 = s + d2
…
sn = s + dn
那么算术平均值为: M = s + (d1 + d2 + … + dn) / n
当(d1 + d2 + … + dn) / n趋近于零时,M就近似于s
算术平均值就是当样本数足够的条件下对真值得无偏估计。
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
S = np.array([5.10,5.02,5.03,4.96,4.98])
mean = 0
for s in S:
mean += s
mean /= s
print(mean)
mean = np.mean(S)
print(mean)
mean = S.mean()
print(mean)
-
加权平均值
numpy.average(样本数组, weights=权重数组)
加权算术平均数同时受到两个因素的影响,一个是各组数值的大小,另一个是各组分布频数的多少。在数值不变的情况下,一组的频数越多,该组的数值对平均数的作用就大,反之,越小。频数在加权算术平均数中起着权衡轻重的作用,这也是加权算术平均数“加权”的含义。
这是苹果某一年某一月的股票收盘价
样本:S = [s1, s2, …, sn]
权重:W = [w1, w2, …, wn]
加权平均值:
a = (s1w1+s2w2+…+snwn)/(w1+w2+…+wn)
closing_prices, volumes = np.loadtxt(
'../../data/aapl.csv', delimiter=',',
usecols=(6, 7), unpack=True) #数据读取
vwap, wsum = 0, 0
for closing_price, volume in zip(
closing_prices, volumes):
vwap += closing_price * volume
wsum += volume
vwap /= wsum
print(vwap)
vwap = np.average(closing_prices, weights=volumes)
print(vwap)
- 最值
numpy.max() 一个数组中的最大元素
numpy.min() 一个数组中的最小元素
numpy.argmax() 一个数组中最大元素的下标
numpy.argmin() 一个数组中最小元素的下标
numpy.maximum() 把两个数组中相对应位置的最大元素收集到一个新的数组中
numpy.minimum() 把两个数组中相对应位置的最小元素收集到一个新的数组中
numpy.ptp() 一个数组中最大元素与最小元素的差
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
# 产生9个位于[10, 100)区间的服从均匀分布的随机数
a = np.random.randint(10, 100, 9).reshape(3, 3)
print(a)
b, c = np.max(a), np.min(a)
print(b, c)
d, e = np.argmax(a), np.argmin(a)
print(d, e)
names = np.array(['zhangfei', 'zhaoyun', 'guanyu'])
scores = np.array([70, 90, 80])
print(names[np.argmax(scores)])
f = np.random.randint(10, 100, 9).reshape(3, 3)
print(f)
g, h = np.maximum(a, f), np.minimum(a, f)
print(g, h, sep='\n')
i = np.ptp(a)
print(i)
- 中位数
一个有限数组中位置正中间的数,假如数组总个数是偶数,取中间两个数的平均值。
numpy.median()
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
s = np.array([2,5,6,3,4,9])
print(median)
median = np.median(closing_prices)
print(median)
- 标准差
样本:S = [s1, s2, …, sn]
均值:m = (s1+s2+…+sn)/n -> 真值
离差:D = [d1, d2, …, dn], di = si - m
离差方:Q = [q1, q2, …, qn], qi = di^2
(总体)方差:v = (q1+q2+…+qn)/n
(总体)标准差:std = sqrt(v) -> 方均根误差,表示所有样本相对于真值的偏离程度。将其作为表征一组随机量分 散性的指标
(样本)方差:v’ = (q1+q2+…+qn)/(n-1)
(样本)标准差:std’ = sqrt(v’)
样本量越大越能反映真实的情况,而算术平均值却完全忽略了这个问题,对此统计学上早有考虑,在统计学中样本的均差多是除以自由度(n-1),它的意思是样本能自由选择的程度。当选到只剩一个时,它不可能再有自由了,所以自由度是n-1。
np.std(样本数组, ddof=非自由度(缺省0))->标准差
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
s = np.arange(1,9)
# 均值
mean = s.mean()
# 离差
devs = s - mean
# 总体方差
pvar = (devs ** 2).sum() / devs.size
# 总体标准差
pstd = np.sqrt(pvar)
# 样本方差
svar = (devs ** 2).sum() / (devs.size - 1)
# 样本标准差
sstd = np.sqrt(svar)
print(pstd, sstd)
pstd = np.std(s)
sstd = np.std(s, ddof=1)
print(pstd, sstd)