不止可列表功能:Threaded介绍

电子说

1.3w人已加入

描述

距离Mathematica及现在的Wolfram语言的初次发布已经34年了。这些年来,我们一直在积极努力地继续建设,增加越来越多的功能,并稳步扩展计算范式的领域。

最近几年,我们已经建立起了一种节奏,大约每年可以交付两次我们开发工作的成果。在2021年12月13日,我们发布了13.0版本。而现在,只在大约6个月之后,我们就发布了13.1版本。如往常一样,尽管这个版本只是一个“.1”,但它依然有很多新的(以及升级的)功能。其中有一些功能,我们已经研究了许多年,现在终于可以享用其成果了。

对我来说,看到每个新版本都能传达出我们想要的内容总是让人激动的。在13.1版本中,我们有90个完整的新功能,同时有203个大量更新的现有功能。除了特定功能中出现的内容以外,13.1版本还包括用户界面和编译器等方面的重要新功能。

现在的Wolfram语言包含了广泛的功能。但是,它的巨大能量并不仅仅来自于它所包含的内容,也来自于其包含的所有内容是如何连贯地结合在一起的。近36年来,我一直将维持这种连贯性作为我自己的个人责任。这项工作既需要高度的注意力,也需要大量深层的脑力工作。但是在我日复一日使用着Wolfram语言时,我骄傲于所取得的成果。

过去四年中,我一直在分享“幕后工作”,展示我们是如何取得这一成果的——通过直播Wolfram语言设计评审会。这是前所未有的开放程度——同时与社区进行互动。在设计13.1版本时,我们进行了90场直播,持续时间超过96小时。在开放我们的流程时,我们不仅向公众展示了为13.1版本所构建的内容,而且还说明了构建它的原因以及是如何做出有关决策的。

But,OK, so what finally is in Version 13.1? Let’s talk about somehighlights….

那么,在13.1的最终版本中到底有什么新内容?接下来我们讲讲一些重点……

不止可列表功能:Threaded介绍

从Mathematica和Wolfram语言的开始,我们就有了可列表功能的概念:例如,如果添加两个列表,它们对应的元素将被添加:

编译器

这一机制非常方便,基本上做到了你想要它做的事。而且35年来,我们都没有想过要扩展这个功能。但如果仔细看看写出来的代码,我们会发现,有一些部分基本上实现了类似可列表的功能,但稍微更加通用一些。在13.1版本中,我们有新的符号结构:Threaded,可以让您轻松、有效地使用可列表功能。

试想:

编译器

这个列表使用了普通的可列表功能,有效计算为:

编译器

但是,如果你想“降低一个层级”并将{x,y}插入第一个列表的最底部怎么办?这种情况下可以使用Threaded来执行该操作:

编译器

Threaded本身只是一个符号包装:

编译器

但是,只要它出现在一个具有Listable属性的函数里——比如Plus,即说明可列表的属性应该应用在Threaded函数内指定的内容在最低层级“线程化”之后。

下面是另一个例子。先创建一个列表:

编译器

那么,我们如何将每一个元素乘以{1,–1}?我们可以这样做:

编译器

但现在,我们有了Threaded函数,所以可以仅表示为:

编译器

你可以将Threaded作为任何可列出函数的参数,而不仅仅用于PlusTimes

编译器

你可以将Threaded和普通的可列表属性一起使用:

编译器

你也可以同时使用多个Threaded

编译器

另外,Threaded得名于另一个函数Thread,这一函数明确地执行“线程”功能,比如:

编译器

默认情况下,Threaded会一直插在列表的最低层级:

编译器
编译器

下面是用如上所述的方法使用Threaded的“现实”案例。3D彩色图像中的数据由RGB值三元组的rank-3数组组成:

编译器

这将每一个RGB三元组乘以{0,1,2}

编译器

大多数时候,你或许想使用普通的可列表属性,在列表的最高层级进行运算;或者你只想使用Threaded的默认格式,在列表的最低层级进行运算。但Threaded有更加普遍的格式,使用这种格式,你可以明确想要在哪个层级运算。

下面是默认案例:

编译器

下面是第一层级,就像普通的可列表属性功能:

编译器

以下是插入第二层级:

编译器

Threaded提供了非常便捷的方法,可以进行所有种类的数组组合操作。如果目标对象本身的“插入”有多重层级,那么就会出现更加复杂的情况。这种情况下,默认的操作就是将插入元素的最低层级与被插入元素的最低层级对齐

编译器

下面是“普通可列表属性”的表现:

编译器

对于我们在此处查看的数组,默认行为等同于:

编译器

有时,把数组写到外面可能更加清晰,比如以下格式:

编译器

这表明,Threaded中的第一级数组,与数组外的第二级数对齐。通常来讲,默认情况等同于–1→ –1,即表明在Threaded中,数组内的最低层级应该与数组外的最低层级对齐。




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分