从 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 的第一个项目是编写蒙特卡罗模拟,该模拟基于一组先前的示例回报来估计简单的投资回报。
在这个任务中,我们必须:
· 用 Python 编写蒙特卡罗模拟· 将代码的输出导入 R· 在 R 中分析我们的模拟· 写一篇关于我们的模拟和结果的讨论
当用 Wolfram 语言重做这个项目时,我决定将 Python 配置为我的 Mathematica 包运行。所以我按照这些说明在 Mathematica 中配置 Python。这个过程让我可以使用我的代码并评估它的可比速度。
现在,让我带您完成这项任务。第一步是为 2004 年和 2014 年之间的投资回报率列表分配一个变量。这个任务对两种编程语言都很简单,但在 Wolfram 语言中,我们可以直接从 Wolfram 知识库中提取实际的投资回报数据:
任务的下一步是创建您自己的函数来计算平均值和标准差,并从由该平均值和标准差定义的正态分布中采样一个随机值。在用 Wolfram 语言编写这些自创函数时,我发现了四个最佳实践:
· 与 Python 中的 # 或””相比,Wolfram 语言中的注释是使用(* *)创建的。您还可以突出显示一段代码输入并使用快捷键Alt+/(或 macOS 上的Command+/)进行注释。
· For 循环和 While 循环不是 Wolfram 语言中循环的最佳方法。相反,使用Table、Map或其他 Wolfram 函数来加速您的代码。
· 不要将您自己创建的 Wolfram 语言函数的首字母大写,因为 Wolfram 定义的函数都是使用驼峰命名的。此外,切勿在函数名称中使用_,因为这表示 Wolfram 语言中的模式序列。
· 在 Wolfram 语言中定义多个函数时,使用一系列不同的迭代变量(即i、j、k、l等)或使用Module函数。这样,如果您调用多个自创函数,迭代变量就不会无意中混淆。
这是我本科时用 Python 编写的一些示例代码:
这是我最近写的可比较的 Wolfram 语言版本:
任务的下一步是编写蒙特卡罗模拟。(完整的代码示例可在我的示例 Monte Carlo 模拟项目附录中找到。)当我第一次用 Wolfram 语言起草这个程序时,我基本上逐字重写了我的 Python 代码、For 循环等。因此,当我运行蒙特卡罗模拟时(高级 Wolfram 语言用户会理解),即使模拟只有 1000 个点,花费的时间也明显比我预期的要长。
正是在这一点上,我意识到 Wolfram 语言与其他口语和手语类似,具有多种构造句子的方法,并且它需要不同的结构来编程。当您有另一种计算语言的背景时,不要认为这种语言与您知道并习惯使用的另一种编程语言的工作方式相似,这一点很重要。
当我重写 Wolfram 语言代码使其不是我的迭代 Python 代码风格的逐字副本时,我的蒙特卡罗模拟在速度上与我的原始 Python 代码示例相当。
任务的最后一步在 Wolfram 语言中很容易:创建直方图并从我的蒙特卡罗模拟输出中获取均值、标准差以及上下 5% 分位数。(对于我的本科作业,所有这些任务都是在 R 和 Python 中执行的,因为在 Python 中创建数字和执行统计对于入门计算课程来说太困难和复杂了。)ta
反思这次经历
在单个软件中对每一个 Wolfram 语言函数进行编程并分析数据非常方便强大。我还花时间简要地重写了关于我的结果的“讨论”。教过多门课——并为大量的作业评分!——作为整个研究生院的助教,我对老师们在评分和审查学生作业时所做的所有工作更加感激。我记得有很多学生在这门本科计算机科学课程中忘记提交他们项目的讨论部分,因为它是独立于 Python 和 R 代码的文档。
Mathematica 在 notebook 界面中集成了代码和排版,可以帮助防止诸如讨论部分未附加到项目代码中的问题。此外,Mathematica 现在支持的一个重要功能是 Mathematica Online的集成,它使用 Wolfram Cloud。许多大学和学院现在都支持 Mathematica 和 Mathematica Online。这让您和其他人可以通过 Web 浏览器、手机或平板电脑访问它,还可以更轻松地共享和发布文档。我可以很容易地看到这个作业的新版本:
“使用以下命名约定:Comp_Sci_100_StudentLastName_Proj1.”
将您完成的 Mathematica 笔记本(代码、结果和讨论)分享到*在此处插入教师电子邮件*”当学生与他们共享笔记本时,教授的 Wolfram Cloud 将发送通知。教职员工可以将笔记本分类到适当的文件夹中,并在准备为作业评分时打开它。
深入了解这些计算的时间和速度
我进行了多个测试来比较 Wolfram 语言和 Python 中不同编程风格的效果来创建这个博客,并将计算分成两个表。所有这些计算都是在 Mathematica 中执行的,Python 计算是在 Mathematica 中使用 Python 的外部会话执行的。
第一列显示了我所描述的迭代编程风格的缓慢时间。(这种风格也称为过程式编程。)第二列介绍了用户定义的函数式编程。这是我使用 Table 或 Map 作为循环函数而不是 For 循环的时候,并遵循了前面提到的 Wolfram 语言中的四个最佳实践。我仅使用内置函数(而不是自创函数)为实现此蒙特卡罗模拟进行了最后一次速度测试。在我的附录中,我还包含了两种额外的 Python 编程风格的代码,这两种编程风格的时序都与这种内置函数风格相似:
表1:以毫秒为单位的 Wolfram 计时
表 2:以毫秒为单位的 Python 计时
(一些注意事项:所有计算均在 Mathematica 中执行。三次重复值的平均值显示在相应表格的每个框中。Python 计算是使用 Mathematica 中的外部会话执行的。浅蓝色背景用于表示最快的时间. 计时使用 Wolfram 的 AbsoluteTiming函数计算,类似的方法用于 timeit 函数和 Python 3.9 版。)
如上表所示,迭代式编程是最慢的。比较单一语言中的不同编程风格,Wolfram 语言在速度上有更大的差异。尽管这种时间差异在 Python 语言中很明显,但并没有那么显著。对于新程序员来说,用 Wolfram 语言编程时这种最初的缓慢速度可能是一种威慑。然而,正如所有程序员都学会以更高效和有效的方式编写代码一样,与编程风格相关的速度的显著提高在 Wolfram 语言中更为明显。从这些表中,很明显 Wolfram 语言在速度上可与 Python 等其他解释型语言相媲美。
对于我们这些接受过 Python 和其他计算语言经典训练的人来说,如果我们尝试像其他语言一样构建代码,Wolfram 语言可能看起来很慢。然而,如果我们退后一步重新考虑我们的代码和我们正在使用的函数,Wolfram语言具有相当的速度和可供探索的大量功能。这些功能还可以使静态作业本质上是动态的,让学生能够使用真实世界的数字和数据探索概念。学习 Wolfram 语言就像学习任何外语一样:必须始终考虑语法和措辞。
购买软件/免费试用
【13.2.1中英文 Wolfram 软件】请评论区留言
标签:

进入了发展快车道 冷链行业市场规模正在快速膨胀
2022-03-21

行业正站在风口 数字化时代在为传统的自行车产业赋能
2022-03-21

以做强实体经济支撑为重点 成都单个项目年度计划投资同比提升
2022-03-21

拥有多个国际赛事的直播版权 广州游戏电竞企业业绩向好
2022-03-21

投诉量激增 直播带货存在这么多问题的主要原因是什么?
2022-03-21

工作专班深入到各企业 春寒料峭挡不住松原市施工热情
2022-03-21

引导企业向提供“产品+服务”转变 湖南加快智能农机服务化转型
2022-03-21

创新平台建设和科技成果转化 德州加大力度重奖创新
2022-03-21

潜在风险进一步放大 商品房现房销售已是大势所趋
2022-03-21

有序复工复产 1—2月份工业经济发展新动能持续增强
2022-03-21
行业正站在风口 数字化时代在为传统的自行车产业赋能
以做强实体经济支撑为重点 成都单个项目年度计划投资同比提升
拥有多个国际赛事的直播版权 广州游戏电竞企业业绩向好
投诉量激增 直播带货存在这么多问题的主要原因是什么?
工作专班深入到各企业 春寒料峭挡不住松原市施工热情
引导企业向提供“产品+服务”转变 湖南加快智能农机服务化转型
创新平台建设和科技成果转化 德州加大力度重奖创新
潜在风险进一步放大 商品房现房销售已是大势所趋
有序复工复产 1—2月份工业经济发展新动能持续增强
多层次高频调度 1至2月河北省工业运行先行指标稳中有增
以车路协同为基础 智能交通推动城市交通绿色高质量发展
人才短板成为制约产业链高质量发展的关键节点
通过技术手段整合调配供给资源 家政行业不断提质扩容
强化产业链深层次合作 加强重大装备国产化“一条龙”模式构建
如何进一步提升纳税人缴费人的减税降费获得感?
探索建设大数据及网络安全示范试点城市有哪些积极意义?
对制造业中小微企业实施缓缴税费政策有哪些积极意义?
进一步增强自我保护意识 消费者需注意辨别谨慎消费
将“走出去”变“请进来” 西安贸易产业转移承接作用不断得到增强
厦门应如何融入“数字中国”的重大战略发展大局?
江苏省如何不断满足老人日益增长的养老服务需求?
建设一体化的职业健康信息管理平台 天津职业人群保障加强
潜力持续释放 1—2月乡村消费品市场恢复略好于城镇
直接对接社会化服务 楼宇调解室将整体提升青岛劳动争议水平
成功化解纠纷11.47万件 银保监会服务质量日趋提高
春雷响百虫出 惊蛰文化在其他方面有了进一步发展
青绿山水画在古代山水画发展史上有着怎样的影响与地位?
开播即爆款 “文化类节目收视率低”这一固有印象被推翻
涵盖了109件真迹作品 凯斯·哈林展览将持续至6月13日


- 带有一点自信的自嘲 “隔路”是另一种味道的“凡尔赛”
- 与文渊阁前后呼应 “何以中国”特展隆重致敬文化大成
- 严重者可造成暂时性失明 享受冰雪运动要注意眼睛的健康防护
- 种类繁多让人眼花缭乱 选购牛奶时需要重点关注什么?
- 网课让孩子感到不安焦虑怎么办?八问八答回应广大家长关切
- 循环系统很容易受到刺激 “倒春寒”期间老人该如何做?
- 青少年患者睡眠问题日趋增加 9条建议为孩子助眠
- 我国肥胖人群正逐年递增 不良饮食习惯是重要诱因
- 如何减少噪声对听力的损伤?这份耳部和听力保健小贴士请收好
- 强化住房限购措施 西安限购限售范围进一步扩大
- 多种方式增加供给 进一步降低新市民和青年人的居住成本
- 预计9月下旬海口可实现安居房申请网上办理
- 政策调控力度持续升级 8月百城二手房市场均价止涨转跌
- 8月中国新房找房热度依然保持平稳 环比微涨0.2%
- 进一步加强商品房销售价格备案管理 今年全国楼市调控刷新历史纪录
- 西安第二批集中供地中28宗为现场拍卖方式出让
- 细分化需求得到释放 房屋居住的属性越发凸显
- 佛山顺德龙江近日挂牌商住地起拍价约19.88亿元
- 青岛市4宗地竞品质抽签结果出炉 地溢价均约15%
- 坚持政策支持、多方参与 浙江版保障性租赁住房明确新增比例目标
- 简化审批流程 武汉将实现房源申请配租全程网上办
- 追剧为何上瘾?你追的不是剧,而是及时满足的快感
- 11月谣言在“身边”,别信这些无稽之谈
- 不会融化的“果冻冰块”研制成功 有望改变食物冷藏方式
- 对症下药“十年痼疾”,“茶博士”帮老茶园重焕生机
- 既促进生产又保护生态他用古代农耕智慧造福现代农业
- 老人被野猪咬伤 打猎者赔了5万多
- 老鼠油治烫伤致孩子进ICU 害人偏方为何被奉为灵丹妙药
- “逆行”考研=集体滑落?这结论该慎下
- 试行“家长学校”“持证上岗”?可以引导但不宜“法外加槛”
- “布鞋奶奶”走了 曾亲自给部队子弟兵送鞋40年
- 北京道路停车支持ETC无感支付
- 北京五道口增设行人信号灯四面全绿时段
- “法不责众”不是健走团“占道”的护身符
- 北京:建议研考考生考前14天在京备考
- 北京市2022年民生实事邀市民投票
- 将“干部”当店名 这个口子不能开
- 北京:242辆京牌小客车参加司法处置
- 吸氢气就能抗癌又防衰?最新“科学”流言榜发布
- 北京:保障在校体育锻炼1小时获较高认可
- 世界艾滋病日:关于艾滋病,我想和你聊聊
- 故宫博物院2022年年票紧急停售 恢复销售时间将另行公告
- 云南磨憨边检站中老边境缴毒逾4公斤
- 内蒙古满洲里公布55例本土确诊病例行动轨迹
- 满洲里高风险地区增至6个 中国内地新冠疫苗接种超25亿剂次
- 广州长隆举办“猿猴特展” 稀有“夜猴”首秀
- 四川绵竹首次拍摄到野生大熊猫标记行为 划定领地或吸引异性
- 福建福州海警局利用无人机成功查获一起非法采矿案
- 北京海关今年已查获2700余批次涉嫌侵权商品
- 安徽合肥警方严打食药环知森领域违法犯罪 侦破重特大案件14起