总结 | 基于代码的数学符号释义(一)

总结 | 基于代码的数学符号释义(一)

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:张小吉  人工智能爱好者社区专栏作者

知乎ID:https://www.zhihu.com/people/mr.ji

个人公众号:鸡仔说  

网上有一个经典的算法入门题:

总结 | 基于代码的数学符号释义(一)
总结 | 基于代码的数学符号释义(一)

在重新学习了一段时间数学基础后,我发现,数学本身的逻辑其实并非复杂到让人难以理解的程度。而最大的坎恐怕就是其中犹如天书般的数学符号吧?基于此,我想整理一个基于代码的数学符号释义,由于我本身的知识水平限制,若出现了部分错误,还希望各位Ladies和乡亲们海涵并指出。另,本文长期更新,欢迎大家补充和收藏。


No.1  Σ

含义:多项数之和

中文:西格玛

英文:sigma

小写:σ

公式解释: 

总结 | 基于代码的数学符号释义(一)

表示 X1 到 Xn 的和,比如n=10的时候,就是10项的和

代码释义


1def sigmod(i, n):
2    # Σ 多项数求和
3    if not isinstance(i, int) or not isinstance(n, int):
4        return False
5    return reduce(lambda x, y: x+y, range(i, n+1))

相关拓展: 

总结 | 基于代码的数学符号释义(一)

双西格玛号,要先求内部的加和再带入外部的求和中,举个????:

总结 | 基于代码的数学符号释义(一)

后面的步骤就是如上一样的求和公式就可以解出来了

代码释义


1def double_sigmod(a, b, i, j, func=None):
2
3    if not isinstance(a, int) or not isinstance(b, int) or not isinstance(i, int) or not isinstance(j, int) or not func:
4        return False
5
6    result = 0
7    for k in range(a, b+1):
8        for n in range(i, j+1):
9            result += func(n, k)
10
11    return result

参考资料

https://www.quora.com/What-is-an-example-of-a-double-summation


总结 | 基于代码的数学符号释义(一)

含义:多项数连续乘积

中文:派

英文:pai

小写:π

总结 | 基于代码的数学符号释义(一)


表示从 X1 到 Xn 的连续乘积,比如n=10的时候,就是10项的乘积

代码释义


1def continue_multiply(i, n):
2    '''    Π 连乘     '''
3    if not isinstance(i, int) or not isinstance(n, int):
4        return False
5    return reduce(lambda x, y: x*y, range(i, n+1))


No.3 n!

含义:一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。

中文:阶乘

英文:factorial

公式解释:n! = 1 × 2 × 3 × ... × n

也可以理解为连乘的特例,条件限制为,即n只能为正整数,并且i从1开始

代码释义


1def factorial(n):
2    '''    n! 阶乘    '''
3    if not isinstance(n, int):
4        return 'Invalid data, please input a int number'
5
6    if n == 0 or n == 1:
7        return 1
8
9    else:
10        return n * factorial(n-1)


总结 | 基于代码的数学符号释义(一)

含义:从n个不同元素中每次取出m(n≥m)个不同元素,组合在一起(不关心顺序)

中文:组合

英文:combination

总结 | 基于代码的数学符号释义(一)


可以理解为一个袋子中有n个标记的小球,从中拿出m个的组合方式。这个需要自己动手动笔算几次就比较容易理解了。

代码释义


1def combination(iter=None, m=0):
2    '''    从 n 中选出 m 个,进行组合     '''
3    result = []
4    tmp = [0] * m
5    length = len(iter)
6
7    def next_num(li=0, ni=0):
8        if ni == m:
9            result.append(copy.copy(tmp))
10            return
11        for lj in range(li, length):
12            tmp[ni] = iter[lj]
13            next_num(lj + 1, ni + 1)
14
15    next_num()
16    return (result, len(result))


总结 | 基于代码的数学符号释义(一)

含义:从n个不同元素中每次取出m(1≤m≤n)个不同元素,排成一列(有顺序要求)

中文:组合

英文:permutation

总结 | 基于代码的数学符号释义(一)


可以这么理解,从n个有标记的小球中,先取出来一个,然后再在接下来的n-1个元素中去除一个放到第二个位置,最后从n-m+1个元素中,取出一个放在第m个位置上

代码释义

(备注,我那个n中选择m个的算法还没搞出来,只实现了全排列,后续搞明白了再补充)


1def permutation(iter=None, n=0):
2    '''     从 n 中选出 n 个,进行排列    '''
3    result = []
4    tmp = [0] * n
5
6    def next_num(arry, ni=0):
7        if ni == n:
8            result.append(copy.copy(tmp))
9            return
10        for lj in arry:
11            tmp[ni] = lj
12            arry_c = arry[:]
13            arry_c.pop(arry.index(lj))
14            next_num(arry_c, ni+1)
15
16    next_num(iter[:], 0)
17    return (result, len(result))


最后温馨提醒,本文会长期更新。也欢迎小伙伴补充更多不是很明了的数学公式,后续会继续完善。

另外,代码已经同步上传至GitHub,欢迎小伙伴follow和star:→→传送门戳阅读全文

一道思考题:求1-100的和(要求时间复杂度最小,温馨提示:尽量使用数学知识)

推荐阅读:

从0开始如何用一个月杀进机器学习比赛Top25%

机器学习算法的随机数据生成


XGBoost算法原理小结

2018年终精心整理|人工智能爱好者社区历史文章合集(作者篇)

2018年终精心整理 | 人工智能爱好者社区历史文章合集(类型篇)

公众号后台回复关键词学习

回复 免费                获取免费课程

回复 直播                获取系列直播课

回复 Python           1小时破冰入门Python

回复 人工智能         从零入门人工智能

回复 深度学习         手把手教你用Python深度学习

回复 机器学习         小白学数据挖掘与机器学习

回复 贝叶斯算法      贝叶斯与新闻分类实战

回复 数据分析师      数据分析师八大能力培养

回复 自然语言处理  自然语言处理之AI深度学习