数学公式太不流畅不如用代码写出来这是程序员学数学的共同方法

2020-03-13 20:14:39  阅读:894+作者:责任编辑NO。卢泓钢0469

选自TowardDataScience

作者:Ian Rowan

机器之心编译

参加:Panda W、一鸣

简练的代码不只能运转程序,还能用来学数学。

∑、∏、∈……假如你学习过数学,你必定知道这些符号的意义,而假如咱们能用最喜欢的编程言语来了解它们,或许还能带来愈加透彻的领会。近来,MindbuilderAI & nurio 创始人、机器学习专家 Ian Rowan 介绍了自己凭借代码来了解数学核算进程的经历。

关于想要在机器学习和数据科学范畴创出一番工作或做出一些研讨成果的人来说,终有一天会在鼓捣 Python 软件库的基础上更进一步,跟从自己的好奇心进入背面的数学范畴。这一般会将你引向那些描绘了各种原理的数量巨大的揭露论文集。你对中心数学机制的了解越深化,你就越或许灵光闪现,成为一种新办法的创造者。在读第一篇论文时,或许一开端一切都还很简略了解,但当你遇到下面这种公式时,你或许就会开端疑问了:

关于学习过多年的数学或研讨过机器学习的数学层面的人来说,这样的等式能够终究靠精心的处理而解析为言语描绘和代码。但对其他许多人来说,这看起来或许就像天书。事实上,这看起来就像是古代的数学首领挑选了看起来最有意思的符号来描绘适当直观的办法。这就导致了一个成果:等式和变量看起来比实践表达的意义还要杂乱得多。

我发现代码不只能用来写程序,并且仍是用于解说杂乱问题的全球通用言语。当我学习数据科学背面的数学时,我总是发现了解数学的最佳办法是写出描绘这些等式的代码段。终究,我了解了这些符号,现在读它们就像读一篇一般论文相同。我期望经过这篇文章共享一些示例,让咱们知道用代码描绘数学竟会如此简略!

求和与求积

在迭代数学办法中,求和符号是最有用且最常用的符号。虽然求和符号规划杂乱,但完结办法却分外的简略,并且也极端有用。

x = [1, 2, 3, 4, 5, 6]result = 0for i in range(6):

result += x[i]Output of print(result) -> 21

如前所示,这个符号表达的实践上的意思便是一个循环。求和符号上面的数字是这个循环的规模,下面的数字是开始方位。下面的变量聚会变成索引变量,每次循环的成果都被加起来,得到一个总和值。下面的符号则更少见一些:

这个符号一般被称为乘积算子(Product Operator)。这个符号与求和符号的工作办法类似,只不过每次循环的成果不是相加,而是相乘。

x = [1, 2, 3, 4, 5, 1]

result = 1

for i in range(6): result *= x[i]Output of print(result) -> 120

阶乘

阶乘的符号是 !,大多数核算器都有这个功用。对许多人来说,这个符号表达的意义或许很明显和直白,但仍是值得用代码来了解其原理。

5! 能够表明成:

result = 1for i in range(1,6):

result *= iOutput of print(result) -> 120

条件括号

条件括号的作用是依据一组条件来切换所要履行的等式。关于程序员来说,这其实便是简略的 if 句子。上面的条件等式可表明为:

i = 3y = [-2, 3, 4, 1]result = 0if i in y:

result = sum(y)elif i > 0: result = 1else:

result = 0print(result) -> 6

能够正常的看到,等式右侧括号中每一行都对应一个条件以及该条件下所要履行的途径。我还在每个条件中增加了额定的「归于」符号,以便供给更多见地。如前所示,咱们查看了 i 值是否在 y 列表中。假如在,则回来数组的和。假如不在,咱们则依据详细的值回来 0 和 1。

逐点乘法和笛卡尔矩阵乘法

终究,我想快速介绍几个任何数据科学家都能够用自己最喜欢的言语库轻松完结的运算——矩阵乘法。了解矩阵乘法的最简略办法是逐点运算。这能够简略地写成:

留意,首要要求是每个矩阵都必须形状相同(即 # rows= & #Columns=)。其代码如下:

y = [[2,1],[4,3]]z = [[1,2],[3,4]]x = [[0,0],[0,0]]

for i in range(len(y)): for j in range(len(y[0])): x[i][j] = y[i][j] * z[i][j]print(x) -> [[2, 2], [12, 12]]

终究,咱们来看一种典型的矩阵乘法进程,这在机器学习范畴十分常用。用杂乱的术语来说,这个运算的意图是求取每个首要行与每个非必须列的点积。首要来说是下面的要求:假定 [#rows, #columns] 矩阵 i x j 要求 #columns(i) == #rows(j) 终究积的形状为 [#rows(i), #columns(j)]

这看起来很令人困惑,我最好的主张是查找一下这些要求的可视化图片。

这个等式的代码如下(使用了 numpy dot 办法):

y = [[1,2],[3,4]]z = [[2], [1]]# x has shape [2, 1]x = [[0], [0]]for i in range(len(y)) for j in range(len(z): x[i][j] = np.dot(y[i], z[:, j])print(x) -> [[4],[10]]

本文仅给出了少数示例,但了解这些简略代码能让任何程序员都能踏足乍看之下难以深化的数学国际。当然,这些办法都能够兼并简化,完结更高的功率,并且一般许多软件库中都有现成的办法可用。用简略代码写出这些数学符号的意义在于经过写出这些等式的真实核算进程来了解它们的意义。

本文为机器之心编译,转载请联络本大众号取得授权。

------------------------------------------------

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!

图文新讯

家装动态