求和与连乘
统计学公式中,求和运算很常见,例如对矩阵求和:
矩阵求和
表示对矩阵 m 中所有元素进行求和,nunpy 通过 sum
完成计算: m.sum()
连乘和求和类似,将矩阵中所有元素做乘积运算:
矩阵连乘
numpy 通过 prod
完成计算,如矩阵 m 的连乘为 m.prod()
实践
了解了上面的各种基础运算后,做些实践
计算均值
向量均值公式为:
向量均值公式
分析公式,其中 n 为向量 x 的元素数量,numpy 的向量,通过 size 获取,后面是向量求和,用 sum 完成,最后代码如下:
(1/x.size)*x.sum()
或者
x.sum()/x.size
实现 Frobenius 范数
现在来个复杂点的,Frobenius 范数,公式如下:
Frobenius 范数公式
先不用纠结 Frobenius 公式的意义,我们只看如何用 python 实现,分析公式,可以看到,首先对矩阵的每个元素做平方运算,然后求和,最后对结果进行开方,那么就从里向外写
矩阵元素求和,根据前面所述,写成 m**2
,会得到新的矩阵,然后求和,直接可写为:
np.sqrt((m**2).sum())
借助 numpy 实现公式,极为简洁。
样本方差
我们再看一个公式:
样本方差公式
其中表示向量 x 的均值,上面计算过,那么套用起来就是:
np.sqrt(((x-(x.sum()/x.size))**2).sum()/(x.size-1))
基本依据上面了解的写法可以理解和写出,不过括号有点多,如果不参考公式,估计看不清实现的啥,好在 numpy 将均值运算通过 mean 方法简化了,例如向量 x 的均值,可以写为:np.mean(x)
,所以上面的代码可以简化为:
np.sqrt(((x-np.mean(x))**2).sum()/(x.size-1))
上面公式实际上是样本标准差公式,对于标准差,numpy 提供了简便方法 std, 直接用 np.std(x)
就可以计算,当然现在我们根据标准差公式:
标准差
很容易写出来 numpy 实现,赶紧试试吧。
欧拉距离
前面写模拟疫情扩散时,用到了欧拉距离,当时没有理解好 numpy 公式表达能力,所以计算时分了三步,现在如果要计算两个向量之间的欧拉距离,一行代码就能搞定,先复习下欧拉距离公式,向量 a 与 向量 b 的欧拉距离为:
欧拉距离公式
numpy 实现为:
np.sqrt(((a-b)**2).sum())
由于欧拉距离应用广泛,所以 numpy 在线性代数模块中实现了,所以了解 numpy 实现数学公式的方法后,可以简化为:
np.linalg.norm(a-b)
总结
numpy 是个博大精深的数学计算库,是 python 实现科学计算的基础,今天我们从数学公式的角度,了解了如何转换为 numpy 的代码实现,限于篇幅,虽然仅是 numpy 的冰山一角,但却可以成为理解 numpy 运算原理的思路,在数据分析或者机器学习,或者论文写作过程中,即使不了解 numpy 中简洁的运算,也可以根据数学公式写出代码实现,进而通过实践学习和了解 numpy 就更容易了