前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强大的 Wolfram 11.0(下)

强大的 Wolfram 11.0(下)

作者头像
WolframChina
发布2018-05-31 14:58:07
5920
发布2018-05-31 14:58:07
举报
文章被收录于专栏:WOLFRAM

█ 本文译自2016年8月8日的 Stephen Wolfram 的博客——Today We Launch Version 11!(http://blog.stephenwolfram.com/2016/08/today-we-launch-version-11/)

本号之前介绍了《从Mathematica 1.0到 Wolfram 11.0,一场持续了30多年的智慧之旅!》《强大的 Wolfram 11.0(上)》等文,今天带您继续一起领略 Wolfram 11.0 强大的新功能——

整合一切

Wolfram 语言的一个中心目标是让一切无缝合作。版本 11 中就有一些这样的新例子。

比如,时间序列现在可以直接使用算数。所以你可以用两个气压的时间序列相减。当然,如果序列中的时间点都按顺序排列这一运算过程会很简单,但是在版本 11 中它们不需要排列:Wolfram 语言会自动处理任意不规则的时间序列。

另一个例子是关于单位的。版本 11 中,统计分布现在可以和单位无缝合作。所以现在正态分布的方差可以不仅仅是2.5,还可以是2.5米。并且,现在所有计算和单位转换都可以完全自动处理。

几何和几何区域已被无缝整合进系统的更多部分了。以前只能用变量的求解系统现在可以操作于给定的任意区域。另一个是关于图像和区域之间的联系:ImageMesh 现在可以从任何图像中构建几何网格。因此,你可以用你最喜欢的猫的图片进行正儿八经的几何计算。

最后一个例子:随机对象。RandomInteger 和 RandomReal 是旧函数。第八版引进了 RandomVariate,可以从任意符号概率分布中提取随机对象。然后在第九版出现了 RandomFunction,可以从随机过程中生成函数。但是现在的版本 11 ,随机的范围扩大了。我们又引入了 RandomPoint,可在任意几何区域中提取任意点。然后还有 RandomEntity 可以提取任意实体,还包括 RamdomWord,都对自然语言过程研究非常有帮助,同时还可以让你测试多种语言的词汇量。最后,版本 11 中还有一个全新的随机数学领域:随机矩阵——实现了我们 Mathematica 和 Wolfram 语言的所有深度和完整度。

可视化

Mathematica 和 Wolfram 语言的长期成果之一是让可视化成为了我们日常工作中的一部分。我们的目标总是尽可能多的自动化可视化功能。现在版本 11 有一系列的新功能来实现自动可视化。

我们有灵活的词云实现对文本和字符串的可视化。我们有时间线图按时间对事件可视化。我们有音频图可以立即对小段和长段音频进行可视化。我们有使用机器学习方法的系统树图能显示图像、文本和其他任何种类数据的层次聚类。还有地理直方图显示地理密度。有 TextStructure 函数可以绘制英语句子的语法。有解剖图显示人体特征(因为没有明显的坐标所以在此使用符号说明)。

还有什么其他可以可视化的东西呢?我自己是做过很多简单程序,如细胞自动机,的规则的可视化(大多用于我在基础科学的研究中)。版本 11 中,我们也加入了 RulePlot 用于很多不同类型的自动可视化规则。

另一个关于可视化的长期挑战,是如何做到数据三维分布的自动可视化。这个问题的障碍在于很难”看穿”三维物体。但在版本 11 中,我们有一系列的函数用不同方法解决这个问题,最常见的是在我们定义的几何系统的位置上对物体进行切片。

在寻求自动可视化中,有一大块是关于标签的。版本 11 中,我们引入了 Callout 让指定点线面中的标注成为可能(我们已经有了图例和提示工具等)。有一个做编号的小方法是,把它们全部都放在(比如说)左边。但实际操作中,这个方法不太好用,因为很多标注最后都叠在一起。版本 11 做的事情比这要复杂得多,利用算法布局这些标注以达到美观和易于表达理解的优化效果。

从字符串到文本......

Mathematica 和 Wolfram 语言一直以来都可以处理字符串。版本 10 中因为 Interpreter 的引入我们又前进了一大步——把在 Wolfram|Alpha 中的自然语言理解的突破应用于数百个领域中对字符串的诠释。在版本 11 中,我们又迈出了一大步——为大规模自然语言处理和文本操作提供了多种函数。

比如,函数 TextWords 和 TextSentences 可以将文本分解为词语和句子(这涉及先进的机器学习技术,不会被如”St. John’s St.”中的句点符号混乱)。然后还有比如 TextCases,这类函数可以自动选出不同的自然语言类别,如国家、日期或名词、动词等。能将单词当做数据处理是一件很有意思的事。WordList 可给出不同类型的词汇列表。WordDefinition 可给出定义。

然后就是多语言能力。Alphabet 能给出几乎所有字母表; Transliterate 可在不同书写系统的语言之间互为翻译;WordTranslation 可给出约200种语言的翻译。对种类繁多的语言学研究而言,这里有大量的干货。

最现代的系统编程

Wolfram 语言无疑是有史以来创造出的最高级的语言。但在版本 11 中我们一路向下添加了一堆应用于计算机系统最底层的功能。首先是 ByteArray,可储存和操作字节的原始序列。还有例如 PingTime 和 SocketConnect 这种可以处理原始网络的函数。

还有一个订阅发布 "通道" 的新架构。你可以先创建一个通道,Wolfram 语言和外部系统都可以对其发送数据,然后你可以建立一个 "收听器",可在数据到达时于 Wolfram 语言部分中行使其任务。这个设置可以做很多事,无论是连接外部服务和设备、处理通知和第三方授权、或创建你自己的聊天系统,都大有用处。

版本 11 另一个新东西是内置密码系统。这是一个非常简洁的符号架构,让你可以使用公钥或私钥系统建立你想要的协议。

那么与网络互动这方面又怎么样呢?Wolfram 语言的符号字符在这里又一次展现了其强大的功能。因为它让比如说 HTTPRequest 和 HTTPResponse 拥有符号结构。还有比如 URLSubmit 函数,用符号式定义的句柄函数回调异步 URL 提交的处理函数。甚至还有 CookieFunction,用于符号处理 cookies。

你可以用任何语言做系统编程,甚至可以在外壳中做编程。但我发现的是,如果在 Wolfram 语言中进行系统编程,会更牛。比如说你在检测电脑系统的性能。首先,你做的一切都在笔记本里完好保存,你可以在里面加评论等等。然后,很重要的一点是,所有东西都可以立即被可视化。或者你也可以应用机器学习。如果你想了解网络性能,可以使用 PingTime 生成一个响应时间列表,然后做成一个和其他数据关联的直方图等。

另外,我们在版本 11 中加入了 FileSystemMap,可以将系统文件当做一系列嵌套列表(或关联)然后用函数映射。所以如果你现在有一个满是图像的目录,可以使用 FileSystemMap 对所有图片进行图像处理。

虽然现在还在实验阶段,但版本 11 还包括了完整的工业级别的查找文本文件系统,可以应用于本地或云端。

在网页上构建

Wolfram 语言的一个强大功能是它不仅可以在桌面运行,也可以在云端运行。在版本 11 中,有很多使用云的功能,比如在网页上创建内容。

我们从比较简单的东西开始。CloudDeploy[FormFunction[...]] 让你可以在网络上立即创建一个基于表单的应用。但现在可以用更简单的方法制作更复杂的表单。现在有很多新型的”智能字段”可以自动使用自然语言理解翻译输入。也有如 RepeatingElement 和 CompoundElement 这种新的结构,可以自动设立新字段以获取列表和关联输入。然后还有全新的可编程语言界面供你定义自己的语法,以便扩展 Wolfram 语言已有的自然语言理解能力。

你可以在 Wolfram 语言中指定很复杂的表单——可有多页和从属表单的格式。但是最终,这些都只是你设立并提交输入时使用的表单。版本 11 引进了新的 AskFunction 架构,让你可以设立更复杂的互动,比如你可以”采访”用户以获取信息数据。在 Wolfram 语言中,整个过程由一个符号结构指定,然后 CloudDeploy 可以立即将它们在网络上激活。

可以简单地在网络上构建复杂的东西,这一直是 Wolfram 语言的一个目标。在版本 11 中,我们添加了 FormPage,让你可以建立一个”回收表单”(如在 wolframalpha.com上),然后使用 GalleryView 从 Wolfram 语言中获取一个资源列表,并立即以”画廊”的形式将其部署到网络上(如 demonstrations.wolfram.com)。

如果你想要在底层运行,我们也有很多新函数如 URLDispatcher 和 GenerateHTTPResponse,你可以使用这些函数决定你在云端的设置该如何处理网络请求。

版本 11 还有例如 CloudPublish 和 CloudShare 这样的函数,可以从 Wolfram 语言中控制访问你放在云端的内容。有一个虽小但是我觉得颇为重要的功能是 SourceLink,可以把比如你部署在云端的图像连接回图像原始创建的笔记本(也在云端)。我觉得这是一个非常重要的”数据备份发布”工具,比如你看到的每一张图片,都可以链接回创建图片的地方。(我们公司内部,对于那些从 Wolfram 语言中自动生成的报告,我也很坚持在报告中加入源链接,这样我就可以随时获取原始数据然后自己做一些分析等等。)

数据进云端

有一个已经在第10版中试验过,在版本 11 中完全支持的功能,它是 Wolfram Data Drop 的全部运行机制,让你可以将从任何地方获取的数据积累进 Wolfram Cloud。我必须说,我还是低估了 Wolfram Data Drop 的用途广度。我开始觉得它应该会主要用于储存从传感器之类的地方来的数据。当然已经有很多在这方面的应用了。但是后来我发现,Data Drop 单单在 Wolfram 语言内部就已经展示了其用处。比如你有一个在 Wolfram 语言中运行的网络表单。你可以对每条请求逐个处理,然后将结果放进 Wolfram Data Drop 的数据仓中,这样你就可以同时分析这些结果。

设立 Wolfram Data Drop 可用于累计时间序列数据。版本 11 中另一个在云端储存数据的方法是 CloudExpression。你可以将任何 Wolfram 语言表达式放进云端表达式中,然后这些表达式就会被永久储存,每一个部分都可以被常用操作提取或设定(如 Part 和 AppendTo),然后可用于 Wolfram 语言会话中的符号上。CloudExpression 是一个很好的储存结构化数据的方式,你可以连续更改部分数据,同时在云端持续储存所有数据。

储存在云端的东西立即持久化。在版本 11 中,还有类似 CloudObject 的 LocalObject,可为你的机器提供持续本地储存。LocalCache 可以完美确保你用的东西在本地对象储存区中被缓存。

与各处连接

在 Wolfram 语言中,我们精选了很多数据,有些直接包含在知识库中,我们还有很多方式访问不同的数据,比如外部 API。版本 11 中增加了很多新连接,比如 Flickr、Reddit、MailChimp、SurveyMonkey、SeatGeek、ArXiv 等。

Wolfram 语言在部署你自己的 API 方面也非常强大。版本 11 还扩展了支持 API 的授权机制,比如用于给出 appid 的 PermissionsKey。CloudLoggingData 还可以给出关于 API 或其他云端对象如何被访问的非常详尽的数据。

在网络上调用的 API 基本都通过给定的 URL 传输数据。在版本 11 中我们有一种新的类 API 结构,可以不通过网络和 URL 而是通过电子邮件运行。MailReceiverFunction 很像 APIFunction,但是在部署这个函数的时候,会定义一个邮箱地址,然后任何发送到这个邮箱地址的邮件可以在邮件接收函数中接收代码。MailReceiverFunction 可以获取一份邮件信息和其标头中不同部分的极详细的信息,然后可以按照你的意愿应用在任何 Wolfram 语言函数中,这样你可以在处理邮件时做任意复杂的自动化。特别对像我一样每天会收到无论是别人发给我的还是自动系统发出的大量邮件的人,这是一个很有用的功能。

WolframScript

可以通过笔记本、桌面或云端访问 Wolfram 语言。也可以通过云端中的定时任务、API 或邮件接收函数访问 Wolfram 语言。通过命令行也可以运行 Wolfram 语言。但是在版本 11 中有一个叫 WolframScript 的新函数可以达到这一目的。

WolframScript 的思路是,为 Wolfram 语言提供一个简单但灵活的界面。WolframScript 让你可以在你自己的电脑上运行本地 Wolfram 引擎——或者用 -cloud 在云端运行。你可以从文件或直接从命令行中运行代码。然后你可以任何格式找回结果——包括文本、图像、声音、PDF、CDF或其他格式。在 Unix 上,你可以用 #!wolframscript 创建一个可以单独调用的脚本,并用 WolframScript 运行。

还有更多可以做的事情。你可以像将 WolframScript 设定得像 Wolfram 语言的 FormFunction 一样运行,即提取你指定的格式的参数 (并在需要时做出解释)。你也可以使用 WolframScript 调用你已在云端定义的 API。

在我们公司,有很多地方将 Wolfram 语言用于大型且经常分布的系统的一部分。WolframScript 提供了一个非常简洁的方法,让你可以随意在任何地方”扔进” Wolfram 语言组件。

核心语言

我已经介绍了很多可以扩展 Mathematica 和 Wolfram 语言算法的广度和深度的内容,但是核心 Wolfram 语言的结构又如何呢?当然,我们致力于保持兼容性(而且我很高兴的说,我们与时俱进的设计让兼容变得很容易)。但我们仍然需要不断地强大和完善这个语言。

在自然语言中,其中一个发展的过程是从常用语中构建新的词汇。我们对 Wolfram 语言也在做基本相同的事情。我们正在积极研究什么”重复计算工作区块”会在大量 Wolfram 语言代码中经常出现。然后——假如说我们可以为这个特定的计算工作区块取个合适的名字——我们就把这个区块加成一个新函数。

在 Mathematica 的早期,我经常认为,如果有函数让你使用惯用语做事,那就行了。但是我后来意识到,如果惯用语精简成单个函数,这个函数的名字又能很好的传达它的功能,那么这个代码就是易读的。而且还省去了不用重复构建惯用语的麻烦,这样一个新函数的诞生就很合理。

在过去的几年,我们公司做出的其中两项创新是递增式语言发展(ILD)和语言的持续性和完整性(LCC)。ILD 的思路是要引进与常用习语等价的函数。LCC 的思路是要确保,只要有意义,就要在系统中支持像比如模式匹配、单位或符号 URL 等功能。

所以,比如说,版本 11 中的典型的新增 ILD 是函数 MinMax,用于在列表中返回最小值和最大值 (这个函数用在了很多 Map 的精细应用)。而 LCC 的典型新增是在关联中支持模式匹配。

在 ILD 和 LCC 间对版本 11 的核心语言做了很多添加。比如,Cases 函数扩展成了 SequenceCases——用来查找列表中的序列而非单个元素。现在还有 SequenceFoldList,它有点像 FoldList,除了它可以“回望”任意长度的元素序列。同样, FoldPairList 通过允许每个步骤返回的结果与折叠过程中的结果相区别,把 FoldList 普遍化了。(这一点听起来可能有点抽象,在某种程度上确实是——但是这个操作在你想要按顺序吸收数据却又想保持一个分开的内状态时非常有用。)

另一个新结构,一开始听起来可能有点怪,叫 Nothing。虽然叫这个名字,但是它的功能却很有用:当它出现在列表中时,就会被立即移除。也就是说,比如说你想移除列表中的什么东西,你只需要用 Nothing 代替它就行了。

版本 11 中我们加入了很多细微的便利。比如说, First 现在有第二个参数,可以说明如果没有第一个元素时要给什么,这样这种情况下就不用加入 If 了。然后还有很多不错的通用机制,比如 UpTo。你可以用Take[list,UpTo[4]] 来获取 list 中至多4个元素,或者有多少元素就获取多少元素。很多地方都支持 UpTo,而且它精简了很多代码。

还有一个小东西是 Echo。当你试图了解一段代码中正在进行什么,有时候你需要打印中间结果。Echo 就可以打印并返回其打印的东西,这样你可以在代码中加入该函数,而不用改变代码本身。

很难相信还会有新的有用的操作需要加入,但版本 11 中确实有一些。Subdivide 有点像 Range,但它将值域细分成相等的部分。TakeLargest 与其相关函数把 Max 等函数通用化,这样不仅只给出最大元素,还可以给出列表中的 n 个最大元素。

还有个叫 Groupings 的函数,我思考了很多年直到现在才能很好地设计出来,它可以有效地生成由特定二进制数或其他组合器形成的所有可能的树图(“用所有可能的方法把一个列表的 1 和 Plus 与 Times 结合,能得到什么数字?”)

在语言的很多地方都有小创新。比如在 Table 中,原本需要 Table[x,{n}]的地方现在只需要写 Table[x,n]。总而言之,有很多事情正在让 Wolfram 语言的版本 11 的核心变得更易懂更简洁更好用。

还有更多

写到这里已经是一篇长博客了,但我远远还没有介绍完版本 11 中的所有新功能。网上能找到更多信息。查阅新区域功能、给现有用户的信息,或新功能总结都能找到更多说明。(也可以详细参见 10.4 到 11.0 中的新功能列表。)

但最重要的是,快加入使用版本 11 的行列!如果你想要快速(并免费)地使用它,可以在 Wolfram Open Cloud 中尝试。也可以直接开始使用 Mathematica 11 或其他基于 Wolfram 语言的版本 11 的产品。

对版本 11 我已经测试了一段时间。因为没有新界面、新功能和那些小便利,对我而言版本10 已经显得有点”老派”了。我对版本 11 的呈现结果非常满意。这称得上是 Mathematica 和 Wolfram 语言这30年来的旅程中的一大飞越。我也很高兴地看到全世界的用户都能第一次通过 Mathematica 11 或其他 Wolfram 语言产品版本 11 体验到很多很棒的功能。

【相关阅读】

《从Mathematica 1.0到 Wolfram 11.0,一场持续了30多年的智慧之旅!》

《强大的 Wolfram 11.0(上)》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WOLFRAM 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档