全国免费电话:
Q554258

行业动态

恒达网址登陆_数学公式太艰涩,不如用代码写出

选自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]]

本文仅给出了少量示例,但明白这些简朴代码能让任何程序员都能踏足乍看之下难以深入的数学天下。固然,这些方式都可以合并简化,实现更高的效率,而且通常许多软件库中都有现成的方式可用。用简朴代码写出这些数学符号的意义在于通过写出这些等式的真正盘算历程来明白它们的寄义。

本文为机械之心编译,转载请联系本民众号获得授权。

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

Copyright © 2014-2019 恒达总代理招商-恒达登录平台 版权所有   

地址: 电话:Q554258 传真:

手机:Q554258 联系人:恒达平台招商主管