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

时间:2018-09-25 21:36:47

标签: python julia

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

  

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

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

另一个热门,更进一步的是:

  

与Python(部分)的显着差异

我没有看到本节中提到的list一词。

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

理解(部分)

开始
  

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

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

一个标题下方是 Generator Expressions

  

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

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

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

1 个答案:

答案 0 :(得分:0)

TL; DR:是,但是更快。

@StefanKarpinski,Julia的共同创建者,发表了以下评论here

  

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

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

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

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。

Julia的2n的{​​{1}}是一个不错的功能。例如,尝试2 * n

2P

请参见here