ITBEAR科技资讯
网站首页 科技资讯 财经资讯 分享好友

Python脚本中的bug,可能影响了数百项学术研究

时间:2019-10-25 14:16:31来源:IT之家编辑:星辉

Python作为一种功能强大且通用的编程语言而广受好评,它具有非常清晰的语法特点,适用于科学计算生态,在数据分析、交互、可视化等方面。

不久前,夏威夷大学的化学研究人员发现,用于化学数据计算分析的一组Python脚本编程有误,该脚本的不同计算机操作系统中运行会产生不同的结果。在计算分析蓝藻实验的结果时,研究人员 Philip Williams 等人发现,通过Python 脚本跑出来的实验结果,因操作系统而异。这导致这些研究人员对已发表的150 多项化学研究论文结果产生了怀疑。

这份脚本名为“Willoughby-Hoye”,脚本大约有1000行,它自2014年开始使用,用来计算核磁共振图谱的化学位移值。研究人员发现在 macOS Mavericks和Windows 10 运行的结果是相同的(173.2),也在研究人员的预想中,但在 macOS Mojave 和 Ubuntu 上却不相同(分别为172.4和172.7),几个结果看起来差不多,但在科学研究领域,对精度要求很高,看似接近的数字起止相差很大。

那么为什么出现这类结果呢?

这份脚本出现的 bug,与我们印象中的 bug 很不同,bug通常在任何地方都会有相同错误结果,而不只是在某些特定的环境中。经过检查,问题锁定在数据的检索方式,每次运行的数据都存储在两个文件中,文件按文件名成对检索,并成对处理。关键在于,检索文件的顺序因操作系统而异。只要文件匹配,就能得到正确的结果。如果不是,将处理来自两次不同运行的数据。

此前,许多新闻报道中认为罪魁祸首是Python标准库模块 glob 模块,该脚本使用Python的glob模块来查找符合特定格式的文件路径名——基于glob的结果去生成读取文件列表。但是glob的结果又取决于操作系统的文件返回值。于是脚本的计算结果会受到文件处理顺序的影响。在Python 文档中关于 glob 模块的描述如下:

glob模块根据Unix shell使用的规则查找与指定模式匹配的所有文件路径名,最终结果以任意顺序返回。

所以这并不是 bug, glob 的结果是任意顺序返回的,它并没有按照指定的顺序返回结果。这错不在Python,而在于编写这份Python 脚本的人。该脚本的作者应该在代码中定义期望的排序行为,以确保一致性。如果是一个好的程序员,在详细阅读文档后,他们能够注意到文档中的说明(例如 glob 的返回结果是任意的),从而在编写代码时考虑到它。这个事情也告诉我们,好的编程技巧相当重要,尤其是当应用到科学计算这类严谨的研究中,失之毫厘,必然差之千里。

Williams 等人发现了这个问题后,为该代码添加了必要的排序代码。他希望科学家们更加关注实验的计算部分,至于该脚本问题影响到其他论文研究结果有多少,他也难以得出定论。

一般来说,代码并不是一篇学术论文中最被关注的点。所以说,计算机学界及其他领域学界往往不会对代码质量过分深究。这也导致,不管是学术研究者还是业界人士,都能感觉到「学术原型代码」和「工业级别代码」之间的巨大差异。

不过相比于工业界的代码,学术论文中代码bug的影响毕竟还是有限的。

更多热门内容
AI焕视,E飞冲天!飞利浦显示器2025年渠道合作伙伴大会在泉州成功举办
2025年4月10日,中国显示器市场外资第一品牌飞利浦显示器,携全国终端渠道合作伙伴在福建泉州,隆重举办了以“AI焕视,E飞冲天”为主题的2025年渠道合作伙伴会议。2025年飞利浦显示器渠道大会隆重召开冠捷科技总裁宣建生博士通过视讯会议的方式参会并做重要讲话。冠捷科技资

2025-04-15

高端轻薄质感,专业性能轻薄本ROG幻16 Air 2025搭载RTX™ 5080登场
备受内容创作者关注,由NVIDIA® GeForce RTX™ 5080笔记本电脑GPU驱动澎湃性能的专业性能轻薄本,ROG幻16 Air 2025现已正式开售。GeForce RTX™ 50系列笔记本电脑GPU搭载NVIDIA Blackwell架构,为游戏玩家和创作者带来全新玩法。RTX™ 50系列具备强大的AI算力,RTX™ 5

2025-04-11

引领开放式聆听!Shokz韶音登顶全球运动耳机销量第一
近期,根据洛图科技《中国耳机耳麦零售市场月度追踪》报告数据显示,2024年,中国耳机耳麦市场的全渠道销量为2.18亿副,同比增长7.6%;销额为428亿元,同比增长9.8%。这已经是中国耳机耳麦市场连续第五年保持增长的态势。而在中国耳机耳麦传统主流电商500元以上高端市场

2025-04-11