繁体   English   中英

核心Julia Devs在Julia中考虑的Python样式列表推导和生成器是什么?

[英]What are Python-Style List Comprehensions and Generators Considered in Julia by Core Julia Devs?

如果我在Julia 1.0.0在线文档中搜索list ,则第一个匹配项是:

可以通过在列表中的每个项目之前添加*,+或-来编写无序列表。

这是一个主题为“ Markdown语法”的主题,显然与Python样式列表无关。

另一个击中点,进一步下降的是:

与Python的显着差异(部分)

我没有看到本节list提到的单词list

搜索“列表理解”,将第10个匹配列为:

理解力(节)

从...开始,

理解为构造数组提供了一种通用而强大的方法。

提到数组似乎暗示可以使用Julia数组完成Python样式的列表理解。

第一个标题是生成器表达式

也可以在不包含方括号的情况下编写理解,从而产生称为生成器的对象。

这听起来很像Python风格的生成器。

Julia的开发人员是否认为Julia的数组(1-dim)本质上等同于Python列表?

TL; DR:是的,但是速度更快。

朱莉娅(Julia)的联合创始人@StefanKarpinski 在这里发表了以下评论

另一个区别是您在Python中使用了一个集合,而在Julia中使用了一个数组(Python称之为“列表”)

因此,根据Stefan所说,“一个数组”(可能表示一维数组)是“ Python称为“列表”的意思”

举个简单的例子,假设我们要找到乘积P ,它具有一千万个比率R ,其中每个项的分子为4n^2 ,并且每个项的分母都比分子小一个R = num/(num - 1) ,其中n = 1到1千万。

无需尝试进行任何形式的优化,这就是Julia 1.0.0中的Python样式列表理解:

julia> P = prod([4n^2/(4n^2 - 1) for n in 1:10_000_000])
1.5707962875230395

在Julia 1.0.0 REPL中运行此程序非常快,基本上在我的笔记本电脑上是瞬时的。 这不是基准测试,但是运行类似的代码(针对Python修改)并在PyCharm的REPL中使用Python 3.6时,运行速度明显慢。

import numpy as np
P = np.prod([4*n**2/(4*n**2 - 1) for n in range(1, 10_000_001)])  
P
1.5707962875404267

只是视觉上的猜测速度,Julia的列表理解速度要快10倍以上。

朱莉娅的发电机呢?

只需删除prod函数调用中的方括号即可:

julia> P = prod(4n^2/(4n^2 - 1) for n in 1:10_000_000)
1.5707962875404267

朱莉娅的答案在我的笔记本电脑上即时显示。

这不是Python和Julia之间的速度比较,因此在这一点上我将离开Python。

朱莉娅2 * n2n是一个不错的功能。 例如,尝试2P

julia> 2P
3.1415925750808533

这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM