2018新年重磅:Wolfram 语言 Mathematica 11.3 发布

版本发布流程

去年 9月, 我们发布了 Wolfram 语言和 Mathematica 11.2,该版本囊括了100 多个全新函数在内的各种功能。版本11.2 是一次重大发布。今天发布的版本 11.3则更为重大,其中包括将近120个全新函数。

今年的6月23日将是1.0 版发布30周年。在不到三十年的时间里,我们一直保持创新和发展的加速度,这一点令我深感自豪。当然, 至关重要的一点是, 我们在使用 Wolfram 语言开发 Wolfram 语言。事实上, 我们在版本11.3中添加的大多数功能都是基于我们30多年来系统构建的庞大技术堆栈。

我们有一条大型研发流水线,所有.1版本的策略是使用它们发布在某个特定时刻准备就绪的所有功能。有时.1 版本中的内容可能无法完全填补一个新领域的空白, 并且某些函数可能被标记为 "experimental"。但我们发布. 1 版本的目标是尽可能及时地提供我们研发努力的最新成果。整数 (. 0) 版本旨在更系统, 并提供新领域的全面功能,使. 1 版本的功能更圆满。

除了11.3 中的所有新功能外,我们的流程还增加了一个新元素。从几个月前开始, 我们开始将开发11.3 版的内部设计评审会议进行视频直播。现在已有将近122小时的会议记录视频,从中你可以确切地了解到, 11.3 版中发布的内容是如何一步步成为现实的。在这篇文章中, 我会提供与我所讨论功能相关的特定视频记录的链接。

新功能


11.3 版的新功能很多,我将在下面详述。顺便一提,版本11.3 在桌面 (Mac、Windows、Linux) 和 Wolfram 云端均可用。的确,实现这种多平台的同时发布,要求非常高端的软件工程、管理和质量保证体系。

一般而言, 版本11.3 不仅增加了一些全新的方向, 而且还扩展和增强了已经存在的功能。核心功能有很多增强: 更自动化的机器学习, 更健壮的数据导入, 知识库预测预取, 更多的可视化选项等。有各种新的便利之处:更容易获得外部语言, 即时输入图标化, 直接扩充等。我们还继续大力推动近年来积极发展的各种领域:机器学习、神经网络、音频、渐近演算、外部语言计算等。

下面是11.3 版中新增函数的词云:

区块链


关于11.3有太多的事情要讲,让我们先从这样一个话题开始:区块链(blockchain)。Wolfram 语言是唯一适合于定义和执行计算型智能合约的语言,我将在以后的博文中作更详尽的解释。对这些合约的实际 Wolfram 语言计算,(目前)将发生在区块链上, 但对于语言来说, 能够连接到区块链是很重要的, 这就是11.3 版中新添的内容。[设计讨论视频链接:https://www.twitch.tv/videos/209464098]。

我们能做的第一件事就是查询一下世界上所有的区块链。比方说,这是最新添加到以太坊 (Ethereum) 区块链中的区块:

现在, 我们可以在该区块中选择一个交易, 然后开始查看:

接下来,我们可以对区块链的结构和内容进行数据科学或任何其他分析。对于版本11.3 的初始版本, 我们支持比特币和以太坊,其他公共区块链也将很快添加。

在版本11.3 中, 我们支持私有(比特币为核心)Wolfram 区块链,由我们的 Wolfram 云架构托管。我们将定期从该区块链发布哈希 (Hash)。在私有 Wolfram 云中也可以运行它的版本。

将内容写入 Wolfram 区块链非常容易(当然,需要花费少量云币)

结果是一个交易哈希,可以在区块链上查找:

这是从区块链上返回的圆环:

顺便一提,Wolfram 语言中的 Hash 函数已在11.3 中扩展,以立即支持在加密货币区块链中使用的哈希类型 (如 "RIPEMD160SHA256")。通过使用 Encrypt 及相关函数, 可以开始在区块链上建立一些相当复杂的东西,敬请期待。

系统建模


现在让我们来讨论一下版本11.3中的大的创新——至少在实验版本中。Wolfram 语言的一个长期目标是能够计算世间万物。在版本11.3 中, 我们添加了一个可以计算的主要新类别: 复杂的工程 (和其他) 系统。

早在 2012年, 我们引入了 SystemModeler: 一个工业强度的系统建模环境, 用于模拟如由成千上万个零件组成的喷气引擎等。SystemModeler 可以让你运行仿真模型, 并使用精密的图形界面进行模型的实际开发。

我们在11.3 版中(实验性)添加的是 Wolfram 语言的内置功能, 可以从 SystemModeler 中运行模型,基本上包括了 Modelica 语言中描述的任何模型。

让我们从一个简单的例子开始。从内置的模型存储库中提取出一个特定的模型:

按 [+] 键可以看到更多细节:

亮点是,你可以实际运行这个模型。SystemModelPlot 可以作出模型的"标准模拟"图:

模型的底层究竟是什么?是一组方程, 描述了系统组件行为的动态。即使是这样一个非常简单的系统, 这些方程已经相当复杂:

对现实世界系统的模拟,往往涉及到大量的组件,许多复杂的交互作用。SystemModeler 旨在让人们以图形的方式设计任意复杂的系统, 并将代表物理或其他对象的组件连接在一起。但最重要的突破是, 一旦你有了模型, 在版本 11.3中,便可以立即在 Wolfram 语言下使用。

每个模型都有很多属性:

其中一个属性给出系统特征的变量。而且,是的,即使在这样一个非常简单的系统中,属性已经很多:

下面是关于其中一个变量在模拟中的行为图:

一个常规任务是,研究参数改变时系统行为的变化。这里模拟系统中的一个参数更改, 然后做出图形:

我们可以继续研究大量不同的可能输入或参数值, 并做一些事情, 比如研究参数变化时系统的鲁棒性。版本11.3 把如此丰富的一个系统建模环境集成于 Wolfram 语言,让我们可以轻松完成所有这些任务。

在11.3中内置有超过1000个现成的模型,应用领域涵盖电力、机械、热力、水力、生物等各种系统。下面是一个稍微复杂的例子——汽车的核心部分:

展开图标,可以将鼠标悬停在各个零件上,了解它们各自是什么:

这里给出了模型的快速摘要,显示它涉及1110个变量:

除了这些现成的模型, 11.3 中还有6000多个构建模型所需的组件。SystemModeler 为组装这些组件提供了完整的图形化环境。你也可以用 Wolfram 语言代码来完成, 使用像 ConnectSystemModelComponents 这样的函数 (它实质上定义了不同组件连接器的连通关系图):

你也可以从它们的基础方程式直接创建模型, 以及完全从数据或经验函数 (例如机器学习) 制作 "黑箱模型"。

我们用了相当长的时间,才得以在11.3 中引入所有这些系统建模功能。这些功能依赖于Wolfram 语言的许多高级功能,包括大规模的符号操作,求解微分代数方程组的鲁棒功能,数量和单位的处理,等等。现在, 系统建模被集成到了 Wolfram 语言中,这打开了各种重要的机遇之门,不止是工程领域的福祉,所有的领域都可以轻松地模拟多组件的现实世界系统。

笔记本推陈出新


在1988年的1.0 版中我们首次引入了笔记本(Notebook)这个概念,在此后的将近30年间不断对其功能进行打磨更新。版本11.3 引入了许多新功能。一个简单的功能是, 关闭的单元组现在默认有一个 "开启按钮", 并且可以使用单元括号进行开启:

我觉得这很有用, 因为我有时会忘了关闭的单元组内还有很多单元。(当然如果你不喜欢这个功能, 可以在样式表中把它关闭。)

另一个小但有用的变化是引入 "不定的In/Out标签"。在连接到活动内核的笔记本中, 连续单元被标记为 In[1], Out[1]等。但是, 如果不再连接到同一个内核(比如, 保存后重新打开了笔记本),In/Out 编号就不再有意义了。因此, 在以往的版本中,不显示 In/Out 标签。但从版本 11.3开始,标签仍然存在, 但它们显示为灰色,并且不具有任何显式的数字编号:

版本11.3 中的另一个新功能是 Iconize。下面是它解决的基本问题。比方说, 你有一组很大的数据或其他输入想存储在笔记本中, 但不希望它在视觉上填满整个笔记本。你可以把它放在关闭的单元里。但是, 要使用这些数据, 必须做一些类似于创建变量之类的事情。Iconize 提供了一种简单、内嵌的方法来保存笔记本中的数据。

下面是如何制作图标化版本的表达式:

现在你可以用这个图标形式代替整个表达式,它立即计算为完整的表达式:

Iconize 在保持代码完整性的同时提高了代码的易读性。例如,考虑这样一个任务:

可以在这里进行选择,然后右击菜单来进行图标化:

这样我们就得到了一个易读的代码段,并且可以得到与刚才相同的结果:

在11.2 版本中, 我们引入了 ExternalEvaluate,用于在 Wolfram 语言中直接运行外部语言 (最初是 Python 和 JavaScript) 中的代码。(这在桌面和私有云中是支持的;出于安全和资源配置的原因, 公共 Wolfram 云只运行纯 Wolfram 语言代码。)

在版本11.3 中,在笔记本中输入外部代码变得更加容易。只需在输入单元中用 > 开始, 就会得到一个外部代码单元(您可以任意选择所需的语言):

然后就会得到一个用于计算的 Wolfram 语言表达式:

工作流程文档


Wolfram 语言的文档功能是我们工作的重点之一。传统上我们基本上有三种类型的文档:"参考页面",介绍单一函数的功能和用法;"指南页面", 连接多个函数并提供用法摘要;和 "教程", 提供功能领域的详细介绍。在版本11.3 中可以得到第四种文档: 工作流程,从"根指南页" 底部的灰块进入。

当所做的一切都用明确的 Wolfram 语言代码来表示时, 笔记本的In/Out范式可以很好地显示发生了什么。但如果你点击四周,或者使用外部程序,这是远远不够的。这就是工作流程的用武之地,它们使用各种图形设备来呈现动作序列,并且不只是输入 Wolfram 语言输入。

因此, 如果你正从一个图中获取坐标, 或者将复杂的表单部署到网页,或者向笔记本中添加大字标题, 则希望遵循我们所拥有的新工作流程文档。顺便提一下, 你可以在函数的参考页中找到指向相关工作流程的链接。

演讲工具(Presenter Tools)


版本11.3 与界面相关的另一个新功能是演讲工具。这是一个完整的文稿演示环境,用于创建和运行包含实时交互的演讲文稿。我们在过去30年中构建的丰富的笔记本系统,使演讲工具成为可能。它所做的是将你需要的所有功能添加进来,方便地创建和运行精彩的演讲文稿。

大约20年来,人们一直在使用 Wolfram 笔记本以前的幻灯片格式进行演示。但那从来不是一个完整的解决方案。它的确提供了很好的笔记本功能, 如在幻灯片放映环境中实时计算, 但它没有做到 "PowerPoint" 可以做到的事情, 例如按屏幕分辨率自动缩放内容。公平地说, 我们期望各种操作系统能够在本质上解决诸如内容缩放之类的问题。但已经20年了, 他们还没有。因此, 我们构建了新的演讲工具, 既解决了这些问题, 又添加了一系列功能, 以尽可能轻松地用笔记本创建精彩的演示文稿。

要开始, 只需选择文件 > 新建 >演讲笔记本。然后选择你的模板和主题,就是这么简单:

这是编辑演示文稿时的截图 (如果需要, 可以随时更改主题):

在演示准备就绪时,只需按下 "开始演讲"。所有内容都将全屏显示, 并自动缩放到所使用屏幕的分辨率。与 PowerPoint 等类似软件最大的区别是: 这里的一切都是实时的、交互的、可编辑且可滚动的。例如可以在幻灯片中插入一个Manipulate, 并且可以立即与它进行交互。(所有的一切都可以是动态的, 比如说可以根据实时导入的数据重新创建图形。)还可以使用单元编组来组织幻灯片内容。可以编辑幻灯片上的内容, 例如现场写代码,实时运行代码。

如果要进入下一张幻灯片,只需按一个键 (或用遥控器操作)。默认情况下使用的是 Page Down 键(仍可以在编辑时使用箭头键),但也可以根据需要设置其他键。你可以让 Presenter Tools 在一个显示器上显示幻灯片,在另一个显示器上显示备注和控件。制作幻灯片时, 可以包括 SideNotes 和 SideCode。SideNotes 是 "类似 PowerPoint" 的文本注释。但 SideCode 不同。它基于我多年来在自己的演讲中做了多年的事情。这是你准备好的代码,在演示文稿中可以实时地插入到幻灯片中, 并在需要时立即对其进行运算。

多年来, 我用 Wolfram 笔记本做过无数次演讲。有几次使用了幻灯片格式, 但大多数情况下, 我是在普通的笔记本文件上先把内容准备好,并在单独的设备上保存笔记。但现在,版本 11.3中提供了几乎所有准备演讲和进行演讲所需要的工具。可以预先定义一些内容和结构, 但实际的演讲可以是动态和即兴的——我可以现场编辑,现场写代码并与听众进行各种互动。

Wolfram 聊天


Wolfram 聊天是与界面相关的另一个新功能。当人们在交互式工作时, 常会听到有人说:“让我给你发条代码”,或者 "我把这个 Manipulate 发给你"。在版本11.3 中, 现在有一个非常方便的方法,用 Wolfram 聊天来完成。它直接内置到 Wolfram 笔记本系统中。[相关技术讨论的视频链接:https://www.twitch.tv/videos/215334391]。

只需选择文件 > 新建 > 聊天。你会被问到想和谁 "聊天",可以是任何有 Wolfram ID 的人,无论在什么地方(当然, 他们必须接受您的邀请):

然后就可以开始聊天了。可以将对话窗与普通笔记本并排放置:

绝妙的是, 你可以发送任何可以出现在笔记本上的内容, 包括图像、代码、动态对象等(当然它是沙箱式的,以防止有人发送"代码炸弹")。

Wolfram 聊天有很多应用场合,不仅可以用于团队协作, 也可以用于课堂设置和技术支持等。还有一些其他的应用场景,比方说进行 livecoding 比赛。事实上, 在去年秋季的 Wolfram 技术会议上,我们曾用它进行 livecoding 竞赛,作为 Wolfram 聊天开发过程的抗压测试之一。

人们可能以为聊天功能很简单。但实际上开发起来相当棘手,需要考虑到很多不同的情况。Wolfram 聊天的底层技术是 Wolfram 云和在版本11.0 中新引入的发布订阅(pub-sub)通道框架。在11.3 中, Wolfram 聊天只支持桌面版的 Wolfram 笔记本, 但很快就会出现在网络和移动设备的笔记本上。

高效便捷的语言功能


不断完善 Wolfram 语言,使之更方便更高效,是我们一直不懈的追求。一个方法是在每个版本中添加新的"便利小函数"。通常,这些函数的功能相当简单明了;但挑战是 (通常需要几年) 为它们想出真正干净的设计。(这里是关于版本11.3的新便利函数的很多设计讨论:https://www.twitch.tv/videos/233108536。)

这里有一个相当棒的函数,它能够用头部和参数构造一个表达式:

这为什么有用?它可以免去显式使用 Function& 构造纯函数的操作,例如在这种情况下:

另一个函数 Curry(这个名称曾令我们颇为苦恼),在某种程度上是非常简单的。Curry(由"currying"而得名,而"currying"则得名于Haskell Curry)制作操作符形式,格式为 Curry[f,n]:

Curry 的单参数形式为:

这有什么用?一些函数 (如 Select) 有内置的 "运算符形式",你给出一个参数,然后把其他参数"鞣制 (curry)"进去:

但如果想自己创建一个运算符形式呢?当然我们可以用 Function& 来显式构建。但有了 Curry 就简单得多了。例如, D 的运算符形式,其中第二个参数指定为 x:

现在, 我们可以应用这个运算符形式来求关于 x 的微分:

是的,Curry 在某种程度上相当抽象。但一旦理解了它就会带来很多方便,而理解它本身就是一个很好的练习,对理解 Wolfram 语言符号式结构来说。说到运算符形式,NearestToNearest 的运算符形式模拟 (Nearest 自身的单参数形式生成一个 NearestFunction):

用下面一个例子来说明它的用途。求密度最接近10 g/cc的5种化学元素:

在2015年发布的版本10.1 中, 我们推出了一系列在列表中操作序列的函数。版本11.3 又增加了若干这样的函数。一个是 SequenceSplit。它就像列表的 StringSplit,在特定序列的位置拆分列表:

另外,SequenceReplace 是"序列家族" 中的又一个新函数:

可视化更新


我们不仅一直在打磨 Wolfram 语言的核心编程功能, 可视化也是我们一直精益求精的重点之一。

版本11.0 推出了 GeoHistogram。下面显示出美国的"火山密度":

在版本11.3中,进一步添加了 GeoSmoothHistogram

版本11.3的另一个新功能是3D图形标注,这里用随机的词语标记随机点(注意这些单词如何放置,以避免彼此重合):

通过基于机器学习的新函数FeatureSpacePlot3D,我们可以制作一个更有意义的单词绘图,可以看到 "vocalizing"(发声)和 "crooning"(低吟) 适当地被放置在彼此附近:

文本阅读


谈到机器学习, 版本11.3 在自动化机器学习方面进一步拓新,建立了使用机器学习的通用工具和具体函数。

举个有趣的例子:一个新的函数是 FindTextualAnswer,给它提供一段文本,它会试图找到文本问题的答案。在这里, 我们使用的是关于 "犀牛"的维基百科文章,问题是犀牛的体重:

接下来就是见证奇迹的时刻。当然, 它并不总是工作,而且有时它可以做的事情,我们人类会认为相当愚蠢。但它使用的是非常先进的机器学习方法,以及基于 Wolfram|Alpha 的大量独一无二的培训数据。如果我们问的不只是犀牛的最大重量,而是它的前5位重量,则可以得到更多的信息:

那么,怎么得到更明确的答案呢?可以使用我们亲自策展的知识库:

或以吨为单位:

FindTextualAnswer 虽不能替代我们的精选策展数据和可计算数据方案,但却可以用来快速猜出一个初步答案,甚至从一段完全非结构化的文本。而且, 它应该很擅长做阅读理解题,甚至参加 Jeopardy!(危险边缘)竞赛。

人脸计算


我们人类对人脸会做出积极的反应,运用现代机器学习可以做各种与脸部相关的计算。在版本11.3 中, 我们特为此增加了相关的系统性函数。在这里,FindFaces 从照片中提取出人脸(著名物理学家):

FacialFeatures 使用机器学习方法估计人脸的各种属性(如表观年龄、表观性别和心情状态等):

例如,这些特征可以作为 FindFaces 的判定标准,挑选出年龄看上去在40岁以下的物理学家:

神经网络


Wolfram 语言现已有各种内部使用神经网络的函数(如 FacialFeatures) 。但近年来, 我们也一直在用 Wolfram 语言努力构建一个完整的子系统, 让人们直接使用神经网络。我们一直在底层的库 (特别是 MXNet, 我们一直是大的贡献者) 之上构建, 因此我们可以利用所有最新的 GPU 和其他优化。但我们的目标是建立一个高层次的符号层, 使其尽可能容易地实际建立神经网络计算。

这方面由多个部分构成:为文本、图像、音频等标准的 Wolfram 语言结构设置自动编码和解码机制;自动将单个神经网络操作(尤其是处理序列之类的运算)组合在一起;能够尽可能自动化的训练, 包括自动进行超参数优化。

但也有一些更重要的任务:拥有一个现有的、训练有素的(和未经训练的)神经网络的大型库,既可以直接用于计算, 也可以用于传递学习,或者作为特征提取器。为了实现这一点, 我们一直在构建我们自己的神经网络仓库(Neural Net Repository):

这里有神通广大的各种网络,并且每周仍在增加。每个网络都有自己的页面, 包括示例和详细信息。网络存储在云端。只需使用 NetModel 就可以把它们轻松纳入你的计算:

这是用于 FindTextualAnswer 的实际网络:

11.3 版的一个新功能是我们为网络使用的图标化表示。我们对它进行了优化, 使您可以全面查看网络图的结构, 并允许交互式深化到任何级别的详细信息。当你训练一个神经网络时, 出现的交互式面板有一些酷炫的新功能。并且使用 NetTrainResultsObject, 实际的训练过程本身也已具备了可计算性。

版本11.3 具有一些新的层类型, 如 CTCLossLayer (特别用于支持音频), 以及对现有层类型的大量更新和增强 (GPU 的10倍速更快 LSTM,自动变量长度卷积,多层扩展以支持任意尺寸输入等)。在版本11.3 中, 我们特别关注递归网络和序列生成。为了支持这一点, 我们引入了 NetStateObject 之类的函数, 它基本上允许网络具有一个持久状态, 根据网络接收的输入数据而更新。

我们在开发符号神经网络框架的过程中,其实是从两个方向齐头并进。第一个方向是使一切变得越来越自动化,从而使神经网络系统的建立越来越容易。第二个方向是能够轻松处理越来越多的神经网络结构。在11.3 版中, 我们添加了一整套 "网络手术" 函数,如 NetTakeNetJoinNetFlatten等,让你进入神经网络,并根据需要对其进行调整和破解。当然, 我们的设计理念是,整个自动化系统包括训练等在内不受影响,仍然正常工作。

渐近分析


30多年来,让一切尽可能数学化、可计算化是我们一直的追求。在11.3 版中, 我们开始突破了一个重要区域:渐近分析。

下面是一个简单的例子:在 x = 0 附近找到一个微分方程的近似解:

这乍看起来像一个幂级数求解问题。但仔细一看: 式中有一个因式e(1/x),作为 x 的幂级数,在每一阶都是无穷大。在 11.3 版中, 我们推出了多个渐进分析函数,能够处理增长和振荡的各种尺度, 而不仅仅是幂。

在我还以一名物理学家的身份谋生的时候, 扰动方法似乎总被某种强大的黑暗艺术围绕,有规则扰动和奇异扰动,有 WKB 法和边界层法等。总之是计算某个小参数的扩展。但无论哪种情况,似乎总是需要不同的方法来求解。但现在, 经过几十年的工作, 终于在11.3 版有系统的方法来解决这些问题。比方说,这里有一个微分方程, 我们求小 ε 的解:

在11.2 版中, 我们添加了许多处理复杂极限的函数。如今有了渐近分析技术, 我们还可以比较渐近增长率,这与数论和计算复杂性理论等领域的各种问题高度相关。

这里问:当n->∞时,2nk 是否渐进小于(nm)! ? 答案:是,在一定情况下:

"初等"代数


Wolfram|Alpha 最受学生用户欢迎的一个功能是"显示步骤" ,它综合了 "on-the-fly 教程", 展示如何获得所给出的答案。但对于代数而言,“步骤”究竟是什么?嗯, 它们是 "初等运算", 比如 "两个等式的相应两边相加"。在11.3 版中, 我们包含的函数能够直接做这样的事情:

这看上去都是些微不足道的函数,基本上只是对方程的结构进行操作。在我部署这项任务时,也想到了这一点。但正如我们的代数研发团队迅速指出的, 这里面有各种解题陷阱,导致学生们经常出错 ("如果 b 为负数会怎样?")。但由于 Wolfram 语言的算法基础结构,得到正确答案轻而易举:

证明


Wolfram 语言的重点是计算结果。但对于一个结果, 你也可以反问为什么它是正确的,要求给出证明。如何在 Wolfram 语言中用可计算的方式表示一般证明,是20年来我一直思考的课题。终于,在版本11.3 中, 函数 FindEquationalProof 提供了一个先锋示例 ,我们将在未来的版本中继续推广和构建。

关于自动定理证明,最令我得意的成功故事是我在2000年发现的布尔代数的极小 (实际上是可证明的最简单) 公理系统。这只是一个单一公理, 用一个单一的的运算符,可以认为是对应于逻辑与非(Nand)运算。11年来,FullSimplify 实际上已经能够在内部使用自动定理证明方法, 能够计算事物。所以在这里, 从我的布尔代数公理开始, 然后计算 Nand 满足交换律:

但这只给出了结果,并未提供任何证明。而在版本11.3中,我们可以得到证明:

证明对象是什么?从总结可以看出, 证据需要102步。然后我们可以要求一个 "证明图"。顶部的绿色箭头代表原始公理;底部的红色方块表示被证明的东西。中间的所有节点都是中间引理, 根据所显示的连接互相证明。

证明里具体有什么?很复杂。但这里有一个数据集, 提供了所有的细节:

你也可以得到笔记本格式的叙述性文字:

然后, 还可以获得一个 "证明函数", 它是可执行以验证结果的代码片断:

不出所料,运行它的结果为 True。

现在, 我们实际上可以生成 Wolfram 语言中的符号证明结构, 有很多经验元数学(Metamathematics) 可以做,我将在未来的文章中讨论。由于 FindEquationalProof 适用于任意符号式 "等式" 关系,它实际上可以应用到许多事情,例如在像区块链等热门领域验证协议和政策等。

成长的知识库


Wolfram 知识库每一天都在成长,有的通过系统的数据馈送,有的通过显式添加的精心策展数据和领域。如果问在版本11.2 和版本11.3 之间发生了什么, 可以把它想成一个奇怪的抓取袋。上市公司有150多项新的属性。冥王星和水星上有900个新的命名特征。有1.6万种新的解剖结构, 如神经通路。有近500个新的 "著名图表"。有数以千计的新山, 岛屿, 著名建筑物, 和其他与地理相关的特征。有许多食物的新属性, 和新的疾病联系。还有很多。

但就 Wolfram 知识库典型的日常用途而言, 11.3 版中最重要的新功能是实体预取系统。知识库很大, 存储在云端。如果你使用的是台式机系统, 数据将根据需要 "魔术般" 下载给您。

在11.3 版里,魔术变得更加强大,当你要求一个特定的项目时, 系统会尝试找出下一步可能会需要的项,并自动开始异步预取,所以当你真正需要它时,它已经在你的电脑里,不必等待它从云端下载。(如果您想 "手动" 预取, 可以用EntityPrefetch 函数。请注意, 如果你是在云端使用 Wolfram 语言, 则知识库已经在那了,也因此无需下载或预取。)

整个预取机制的应用相当普遍。例如, 如果使用解释器解释某些输入 (例如, 美国州名缩写), 有关如何进行解释的信息也将得到预取 ,因此如果你使用的是桌面机,则可以在本地进行解释, 而无需与云端沟通。

消息和邮件


在 Wolfram 语言中(使用SendMail)发生电子邮件并不是新功能,但从版本11.3开始,它可以采用完整的HTML格式,并可以在其中嵌入各种内容,不只是图形和图像,还可以是云对象、数据集和音频等。

版本11.3 还推出了使用 SendMessage 发送文本消息 (SMS 和彩信) 的能力。不过, 出于安全考虑, 只能发送到自己的移动电话号码, 由 $MobilePhone 的值给出(当然,号码必须通过验证)。

Wolfram 语言早就可以导入邮件和邮箱, 而且 MailReceiverFunction 也能够响应传入的邮件。在版本11.3 中添加的新内容是处理实时邮箱的能力。

首先, 连接到一个邮件服务器(这里是 IMAP,身份验证对话框略过):

然后你就可以用 Wolfram 语言作为可编程的邮件客户端了。这将为你提供邮箱中当前未读邮件的数据集:

现在, 我们选出其中一条消息,得到一个符号 MailItem对象,以执行各种操作,例如删除:

系统级操作


版本11.3 支持许多新的系统级操作。让我们从简单但有用的一个操作开始: 远程程序执行。函数 RemoteRun 基本上就像 Unix rsh: 给出一个主机名 (或 IP 地址), 它在那里运行一个命令。通过 "身份验证" 选项可以指定用户名和密码。如果要远程运行一个持久性程序, 现在可以使用 RemoteRunProcess, 这是本地 RunProcess 的远程模拟。

在处理远程计算机系统时, 身份验证始终是一道难题。几年来, 我们一直在用 Wolfram 语言构建一个渐进复杂的符号认证框架。在版本11.3 中有一个新的 AuthenticationDialog 函数, 它会弹出了一系列配置正确的身份验证对话框。然后有 GenerateSecuredAuthenticationKey 生成 OAuth SecuredAuthenticationKey 对象, 人们可以使用它来验证从外部到 Wolfram 云的调用。

此外, 在系统级别, 还有一些新的导入/导出格式, 如 BSON (类似 JSON 的二进制序列化格式) 和 WARC (web 存档格式)。还有 HTTPResponseHTTPRequest 格式等,让我们可以用几行代码在 Wolfram 语言中编写 web 服务器。

自 ByteArray 对象几年前被引入到 Wolfram 语言中以来,我们一直在不断增加对它们的支持。在11.3 版中, 有 BaseEncodeBaseDecode 用于在字节数组和 Base64 字符串之间进行转换。版本11.3 还扩展了适用于字节数组的 Hash,添加了用于现代区块链和加密币技术的各种哈希类型 (如双 SHA-256 和 RIPEMD)。

我们不断增加各种数据类型,使其在 Wolfram 语言中可被计算。在11.3 版中增添了系统过程数据,你可能从 Unix ps 命令得到:

毋庸赘言,你可以对具有特定属性的进程进行详尽的搜索,还可以使用 SystemProcesses 来获取 ProcessObject 符号对象的显式列表, 对其进行询问和操作(例如使用 KillProcess)。

当然,因为一切都可计算,很多事情变得轻而易举,比如绘制计算机运行进程的开始时间图形(是的,我的机器在几天前重新启动过):

如果想了解计算机周围发生了什么, 版本11.3 提供了另一个强大的工具:NetworkPacketRecording。你可能需要设置一些权限,然后就可以用这个函数记录通过计算机上的任何网络接口的网络数据包。

这是我在这里安静地写这篇文章时,在0.1 秒时间内进出我的电脑的数据包:

可以下钻到每一个数据包,这是记录的第一个:

这个功能有何用处?它可以用于程序调试,并且对于研究计算机安全也很有用, 尤其是可以立即将所有内容馈送给标准的 Wolfram 语言可视化、机器学习和其他功能。

尚未提及的功能


这篇文章已经相当长了,但11.3版还有很多其他功能我甚至尚未提到。例如, 导入和导出方面有各种更新:更高效鲁棒的 XLS, CSV, 和 TSV 导入,动画 PNG 的导出等;对 MP3 和 WAV 等声音格式元数据的支持;以及在 GIF、TIFF 等格式文件中的更复杂的色彩量化,等等。

我们在11.0 引入了符号音频对象(Audio),自那以后, 我们一直在大力开发音频功能。版本11.3 使音频捕获更加健壮(并且第一次在 Linux 上支持)。它还引入了控制打开 AudioStream 对象的 AudioPlayAudioPauseAudioStop 等函数。

另一个新函数是 AudioDistance,支持对音频的各种的距离测度。同时, AudioIntervals 现在可以自动根据静音将音频分解。在一个某种不同的领域, $VoiceStyles 给出了 SpeechSynthesize 可用声音的列表。

这里有一个新的数学小函数 DeBruijnSequence, 给出一个0和1的序列, 其中每个长度为4的块恰好出现一次:

Wolfram 语言现在有对数量和单位的高级支持,既支持显式数量 (如2.5 kg) ,也支持符号式的 "数量变量"("p which has units of pressure")。但在解方程时,我们通常想 "把单位去掉"。在11.3 中, 现在有一个系统执行此操作的函数:NondimensionalizationTransform。11.3 还有一个新的机制, 在引进新的量纲类型时,使用 IndependentPhysicalQuantity

Wolfram 内置知识库的大部分最终都是以实体存储的形式表示的, 在版本11中, 我们引入了一个显式的 EntityStore构造来定义新的实体存储。版本11.3 引入了函数 EntityRegister, 它允许你注册实体存储, 以便引用它所包含的实体类型, 就像引用内置实体类型 (如城市或化学品)一样。

在版本11.3 中实验性推出的另一个功能是 MongoLink 包, 它支持与外部 MongoDB 数据库的连接。我们自己使用 MongoLink 管理万亿字节(TB)以上的数据, 如机器学习训练。事实上, MongoLink 是我们大型开发努力的一部分,其结果将在以后的版本中看到, 以实现对极大量外部存储数据的无缝支持。

在版本11.2 中, 我们引入了 ExternalEvaluate 以运行 Python 等外部语言的代码。在11.3 版中, 我们正在通过建立一个 WebDriver 框架来尝试推广 ExternalEvaluate 以控制网页浏览器。你可以给出各种命令, 这些命令与在网页浏览器上单击具有相同的效果, 或者可以提取页面上显示的内容。

下面是如何使用 Chrome(支持 Chrome 和火狐)打开并捕获页面:

好了, 这篇文章越来越长, 但似乎还有很多要讲。下面是11.3 版中新增或更新函数的完整列表:

版本11.3虽然只是 Wolfram 语言的一个.1发布,据上一次.1发布不过几个月的时间,但却纳入了大量新功能,并且是我们研发努力的重要风向标。这一切都建立在我们完整的 Wolfram 语言技术栈上。当然,11.3中还有很多新的边边角角亟待发掘。我希望更多的人来探索, 用我们创建的最新工具来发明创新,并探索未知世界。

下载试用版:

https://www.wolfram.com/mathematica/trial/

官网直接购买:

http://store.wolfram.com

与我们的销售直接联系:

info-china@wolfram.com

本文分享自微信公众号 - WOLFRAM(WolframChina)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逻辑熊猫带你玩Python

Python | "整理一些模块,不用也能拿来吹"

2、刚好今天有读者向我提问的时候,看到有这么道题,写出你使用过的模块,并简单描述一下。

34740
来自专栏牛客网

阿里2017Java开发面经 暑期实习+秋招

秋招结束,总结了一下从寒假回来开始的实习生招聘和秋招面经,过来回馈一下牛客网。 1、一面 23分钟 看了你的博客,写的很多,介绍一个你研究最深入的领域吧 我说了...

43460
来自专栏程序员的碎碎念

分享几个我经常用到的函数

同上一个推送一样,为了提高php开发的效率,在学习完一些零零碎碎的知识外,我们要学会的那就是总结与分享,学会封装类和函数,方便下次你再次敲此功能代码。在...

38260
来自专栏Spark学习技巧

第1篇:数据库需求与ER建模

数据库需求与ER建模 前言 在数据库建设过程中,哪一步最重要?绝大多数资料会告诉你,是需求分析阶段。这一步的好坏甚至直接决定数据库项目的成败。 需求分析阶段,也...

57070
来自专栏吉浦迅科技

DAY80:阅读Compute Capability 3.x

When a multiprocessor is given warps to execute, it first distributes them among...

27940
来自专栏Data Analysis & Viz

手把手教你完成一个数据科学小项目(3):数据异常与清洗

本系列将全面涉及本项目从爬虫、数据提取与准备、数据异常发现与清洗、分析与可视化等细节,并将代码统一开源在GitHub:DesertsX/gulius-proje...

16430
来自专栏IT派

我用 Python 爬取微信好友,最后发现一个大秘密

你身处的环境是什么样,你就会成为什么样的人。现在人们日常生活基本上离不开微信,但微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界。你所处的朋友圈是怎么样,...

21840
来自专栏Hadoop数据仓库

HAWQ取代传统数仓实践(十)——维度表技术之杂项维度

一、什么是杂项维度         简单地说,杂项维度就是一种包含的数据具有很少可能值的维度。事务型商业过程通常产生一系列混杂的、低基数的标志位或状态信息。与其...

35990
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第1章 准备工作1.1 本书的内容1.2 为什么要使用Python进行数据分析1.3 重要的Python库matplotlibIPython和JupyterSc

下载本书:http://www.jianshu.com/p/fad9e41c1a42(更新为GitHub链接) 下载本书代码:https://github.c...

50770
来自专栏大数据文摘

手把手 | 数据科学速成课:给Python新手的实操指南

19950

扫码关注云+社区

领取腾讯云代金券