从 Python 迁移到 Wolfram 语言的经验教训![]() ![]() 自从我开始在 Wolfram 工作,我几乎一直在使用 Mathematica,不仅作为计算软件,而且作为编写文档的程序。我很快就在这两种功能中熟练使用 Mathematica,但我还没有真正将它用作Wolfram 语言的编程平台。 我在高中时发现了 Wolfram,我当时——现在仍然如此!——对 Wolfram|Alpha 的自然语言能力和知识库着迷。这种兴趣一直持续到大学,在大学我接受了 Python 和 Java 的经典培训,但继续将 Wolfram|Alpha 用于数学和化学。我的本科研究要求我学习 bash 脚本和 Tcl,期间我继续使用 Python。 在我攻读博士学位的第一学期,我在研究生院的高级量子力学课程中接触了 Mathematica。我的博士研究小组的研究科学家是一个强大的 Mathematica 用户,建议我用他的 Mathematica 笔记本仔细检查最初使用 Python 分析的结果。尽管我在攻读博士学位期间多次接触 Mathematica,但我从未想过 Wolfram 语言可以与 Python 相媲美,直到我开始在 Wolfram 工作时才意识到它可以用于“实际”编程。 所以一个星期六,我坐在我的电脑前,通过重写我本科计算机导论课程的作业来弄清楚 Wolfram 语言的功能。我可以在 Wolfram 语言中快速镜像我的本科 Python 代码,但最终学到了两条非常重要的经验: Wolfram 语言在利用其优势编写的代码而不是镜像其他语言使用的编程风格时效果最佳。 Wolfram 语言与其他语言相比具有优势,因为它内置了对动态、真实世界数据的访问。 我的第一个Python项目 作为一名本科生,我使用 Python 的第一个项目是编写蒙特卡罗模拟,该模拟基于一组先前的示例回报来估计简单的投资回报。 在这个任务中,我们必须:
当用 Wolfram 语言重做这个项目时,我决定将 Python 配置为我的 Mathematica 包运行。所以我按照这些说明在 Mathematica 中配置 Python。这个过程让我可以使用我的代码并评估它的可比速度。 现在,让我带您完成这项任务。第一步是为 2004 年和 2014 年之间的投资回报率列表分配一个变量。这个任务对两种编程语言都很简单,但在 Wolfram 语言中,我们可以直接从 Wolfram 知识库中提取实际的投资回报数据: ![]() 任务的下一步是创建您自己的函数来计算平均值和标准差,并从由该平均值和标准差定义的正态分布中采样一个随机值。在用 Wolfram 语言编写这些自创函数时,我发现了四个最佳实践:
这是我本科时用 Python 编写的一些示例代码: ![]() 这是我最近写的可比较的 Wolfram 语言版本: ![]() 任务的下一步是编写蒙特卡罗模拟。(完整的代码示例可在我的示例 Monte Carlo 模拟项目附录中找到。)当我第一次用 Wolfram 语言起草这个程序时,我基本上逐字重写了我的 Python 代码、For 循环等。因此,当我运行蒙特卡罗模拟时(高级 Wolfram 语言用户会理解),即使模拟只有 1000 个点,花费的时间也明显比我预期的要长。 正是在这一点上,我意识到 Wolfram 语言与其他口语和手语类似,具有多种构造句子的方法,并且它需要不同的结构来编程。当您有另一种计算语言的背景时,不要认为这种语言与您知道并习惯使用的另一种编程语言的工作方式相似,这一点很重要。 当我重写 Wolfram 语言代码使其不是我的迭代 Python 代码风格的逐字副本时,我的蒙特卡罗模拟在速度上与我的原始 Python 代码示例相当。 任务的最后一步在 Wolfram 语言中很容易:创建直方图并从我的蒙特卡罗模拟输出中获取均值、标准差以及上下 5% 分位数。(对于我的本科作业,所有这些任务都是在 R 和 Python 中执行的,因为在 Python 中创建数字和执行统计对于入门计算课程来说太困难和复杂了。) ![]() ![]() 反思这次经历 在单个软件中对每一个 Wolfram 语言函数进行编程并分析数据非常方便强大。我还花时间简要地重写了关于我的结果的“讨论”。教过多门课——并为大量的作业评分!——作为整个研究生院的助教,我对老师们在评分和审查学生作业时所做的所有工作更加感激。我记得有很多学生在这门本科计算机科学课程中忘记提交他们项目的讨论部分,因为它是独立于 Python 和 R 代码的文档。 Mathematica 在 notebook 界面中集成了代码和排版,可以帮助防止诸如讨论部分未附加到项目代码中的问题。此外,Mathematica 现在支持的一个重要功能是 Mathematica Online的集成,它使用 Wolfram Cloud。许多大学和学院现在都支持 Mathematica 和 Mathematica Online。这让您和其他人可以通过 Web 浏览器、手机或平板电脑访问它,还可以更轻松地共享和发布文档。我可以很容易地看到这个作业的新版本: “使用以下命名约定:Comp_Sci_100_StudentLastName_Proj1.” |











