干掉公式 —— numpy 就该这么学(二)

简介: 机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用 python 实现的方式方法。

求和与连乘

统计学公式中,求和运算很常见,例如对矩阵求和:

5.jpg


矩阵求和

表示对矩阵 m 中所有元素进行求和,nunpy 通过 sum 完成计算: m.sum()

连乘和求和类似,将矩阵中所有元素做乘积运算:

6.jpg

矩阵连乘

numpy 通过 prod 完成计算,如矩阵 m 的连乘为 m.prod()

实践

了解了上面的各种基础运算后,做些实践

计算均值

向量均值公式为:

7.jpg


向量均值公式

分析公式,其中 n 为向量 x 的元素数量,numpy 的向量,通过 size 获取,后面是向量求和,用 sum 完成,最后代码如下:

(1/x.size)*x.sum()

或者

x.sum()/x.size

实现 Frobenius 范数

现在来个复杂点的,Frobenius 范数,公式如下:

8.jpg


Frobenius 范数公式

先不用纠结 Frobenius 公式的意义,我们只看如何用 python 实现,分析公式,可以看到,首先对矩阵的每个元素做平方运算,然后求和,最后对结果进行开方,那么就从里向外写

矩阵元素求和,根据前面所述,写成 m**2,会得到新的矩阵,然后求和,直接可写为:

np.sqrt((m**2).sum())

借助 numpy 实现公式,极为简洁。

样本方差

我们看一个公式:

9.jpg


样本方差公式

其中11.jpg表示向量 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) 就可以计算,当然现在我们根据标准差公式:

10.jpg


标准差

很容易写出来 numpy 实现,赶紧试试吧。

欧拉距离

前面写模拟疫情扩散时,用到了欧拉距离,当时没有理解好 numpy 公式表达能力,所以计算时分了三步,现在如果要计算两个向量之间的欧拉距离,一行代码就能搞定,先复习下欧拉距离公式,向量 a 与 向量 b 的欧拉距离为:

12.jpg


欧拉距离公式

numpy 实现为:

np.sqrt(((a-b)**2).sum())

由于欧拉距离应用广泛,所以 numpy 在线性代数模块中实现了,所以了解 numpy 实现数学公式的方法后,可以简化为:

np.linalg.norm(a-b)

总结

numpy 是个博大精深的数学计算库,是 python 实现科学计算的基础,今天我们从数学公式的角度,了解了如何转换为 numpy 的代码实现,限于篇幅,虽然仅是 numpy 的冰山一角,但却可以成为理解 numpy 运算原理的思路,在数据分析或者机器学习,或者论文写作过程中,即使不了解 numpy 中简洁的运算,也可以根据数学公式写出代码实现,进而通过实践学习和了解 numpy 就更容易了

目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
121 0
|
4月前
|
算法 Python
`scipy.optimize`模块提供了许多用于优化问题的函数和算法。这些算法可以用于找到函数的最小值、最大值、零点等。
`scipy.optimize`模块提供了许多用于优化问题的函数和算法。这些算法可以用于找到函数的最小值、最大值、零点等。
|
6月前
leetcode-1380:矩阵中的幸运数
leetcode-1380:矩阵中的幸运数
36 0
torch中对一个行向量使用sigmoid函数转换成概率,如果这个行向量包含的元素有几千上万个,这可能会导致转换成的概率再抽样效果不好,应该怎么解决这个问题
可以尝试使用softmax函数进行转换,它可以处理具有多个值的行向量,并将其转换为概率分布。另外,可以考虑使用截断技术(如Top-K),减少概率中过小的部分,以提高采样效果。
138 0
|
Python
LeetCode 1380. 矩阵中的幸运数
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
98 0
python_numpy_计算对数收益率和还原问题
python_numpy_计算对数收益率和还原问题
138 0
|
Python
numpy重新学习系列(10)---如何用np.arange生成均匀间隔分布的array
numpy重新学习系列(10)---如何用np.arange生成均匀间隔分布的array
92 0
|
人工智能 Go Python
CSP 202112-2 序列查询新解 python 离散+二分法
CSP 202112-2 序列查询新解 python 离散+二分法
CSP 202112-2 序列查询新解 python 离散+二分法
|
Python
Python经典编程习题100例:第44例:两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵
Python经典编程习题100例:第44例:两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵
293 0
如何用牛顿法求一个数的平方根
(一)导数与导函数 导数 设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作①f'(x0) ;②y'│x=x0 ;③ │x=x0, 即 导函数 如果函数y=f(x)在开区间内每一点都可导,就称函数f(x)在区间内可导。
3897 1