求和与求积在迭代数学方法中,求和符号是最有用且最常用的符号。尽管求和符号设计复杂,但实现方法却非常简单,而且也极其有用。x = [1, 2, 3, 4, 5, 6] result = 0 for i in range(6): result += x[i] Output of print(result) -> 21如前所示,这个符号表达的其实就是一个循环。求和符号上面的数字是这个循环的范围,下面的数字是起始位置。下面的变量集会变成索引变量,每次循环的结果都被加起来,得到一个总和值。下面的符号则更少见一些:这个符号通常被称为乘积算子(Product Operator)。这个符号与求和符号的工作方式相似,只不过每次循环的结果不是相加,而是相乘。x = [1, 2, 3, 4, 5, 1] result = 1for i in range(6): result = x[i] Output of print(result) -> 120阶乘 阶乘的符号是 !,大多数计算器都有这个功能。对很多人来说,这个符号表达的含义可能很明显和直白,但还是值得用代码来理解其原理。 5! 可以表示成:result = 1 for i in range(1,6): result = i Output of print(result) -> 120条件括号条件括号的作用是基于一组条件来切换所要执行的等式。对于程序员来说,这其实就是简单的 if 语句。上面的条件等式可表示为:i = 3 y = [-2, 3, 4, 1] result = 0 if i in y: result = sum(y) elif i > 0: result = 1 else: result = 0 print(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]]本文仅给出了少量示例,但理解这些简单代码能让任何程序员都能踏足乍看之下难以深入的数学世界。当然,这些方法都可以合并简化,实现更高的效率,而且通常很多软件库中都有现成的方法可用。用简单代码写出这些数学符号的意义在于通过写出这些等式的真正计算过程来理解它们的含义。原文链接:https://towardsdatascience.com/understanding-mathematical-symbols-with-code-5aa0c542644
(图片来源网络,侵删)
0 评论