8.轴向扩展
沿着给定数组的某个轴向将一个针对元素的处理函数应用为针对数组的处理。
numpy.apply_along_axis(处理函数, 轴向, 参数数组)
沿着参数数组的特定轴向依次调用处理函数,并将返回值重新组织成数组返回。
代码:axis.py、sum.py
9.卷积运算
numpy.convolve(a, b, 'full') -> c
a: [1 2 3 4 5]
b: [6 7 8]
c: [6 19 40 61 82 67 40]
numpy.convolve(a, b, 'same') -> [19 40 61 82 67]
numpy.convolve(a, b, 'valid')->[40 61 82]
6 19 40 61 82 67 40
0 0 1 2 3 4 5 0 0
8 7 6
8 7 6
8 7 6
8 7 6
8 7 6
8 7 6
8 7 6
代码:conv.py、sma.py
ABCDE
abcde
s=a+b+c+d+e
(Aa+Bb+Cc+Dd+Ee)/(a+b+c+d+e)
(Aa+Bb+Cc+Dd+Ee)/s
Aa/s+Bb/s+Cc/s+Dd/s+Ee/s
[a/s b/s c/s d/s e/s]
10.线性模型
1)线性预测
N = 3
0 1 2 3 4 5
a b c d e f g
?
A/B/C
aA+bB+cC=d \
bA+cB+dC=e > A B C
cA+dB+eC=f /
g=dA+eB+fC
/ a b c \ / A \ / d \
| b c d | X | B | = | e |
\ c d e / \ C / \ f /
a x b
ax=b
x=numpy.linalg.lstsq(a,b)
b^Tx=g
代码:line.py
2)线性拟合
kx + b = y
kx1+b=y1
kx2+b=y2
...
kxn+b=yn
/ x1, 1 \ / k \ / y1 \
| x2, 1 | X| | = | y2 |
| ... | \ b / | ... |
\ xn, 1 / \ yn /
a x b
numpy.linalg.lstsq(a, b) -> x
代码:trend.py
11.裁剪、压缩和累乘
numpy.ndarray.clip()方法返回一个裁剪过的数组,原数组中所有比给定最大值大的元素全部被限定为最大值,而所有比给定最小值小的元素全部被限定为最小值。
numpy.ndarray.compress()方法返回一个根据给定条件筛选后的数组。
numpy.ndarray.prod()方法返回数组中各元素累乘的结果。
代码:ndarr.py
四、numpy的便捷函数
1.相关性
1)协方差
样本集
a: [a1 a2 ... an]
b: [b1 b1 ... bn]
均值
ave(a) = (a1+a2+...+an)/n
ave(b) = (b1+b2+...+bn)/n
离差
dev(a) = [a1 a2 ... an] - ave(a)
dev(b) = [b1 b2 ... bn] - ave(b)
方差(自协方差)
var(a) = ave(dev(a)dev(a)) = cov(a,a)
var(b) = ave(dev(b)dev(b)) = cov(b,b)
标准差
std(a) = sqrt(var(a))
std(b) = sqrt(var(b))
互协方差
cov(a,b) = ave(dev(a)dev(b))
cov(b,a) = ave(dev(b)dev(a))
协方差矩阵
/ \
| cov(a,a)/std(a)std(a) cov(a,b)/std(a)std(b) |
| cov(b,a)/std(b)std(a) cov(b,b)/std(b)std(b) |
\ /
主对角线上的值为1,辅对角线上的值相等,又名相关性系数,其正负表示相关性的方向,为正则正相关,为负则负相关,其绝对值大小表示相关性程度,绝对值越大相关程度越高,反之则越低。
numpy.cov(a,b) -> 协方差矩阵的分子矩阵
numpy.corrcoef(a,b) -> 协方差矩阵
代码:corr.py