python - Core Julia Devs 在 Julia 中考虑了哪些 Python 样式的列表理解和生成器?
问题描述
如果我在 Julia 1.0.0 在线文档中搜索list
,第一个命中是:
可以通过在列表中的每个项目前加上 *、+ 或 - 来编写无序列表。
这是一个名为“Markdown 语法”的主题,显然与 Python 样式的列表无关。
另一个打击,更进一步的是:
与 Python 的显着差异(部分)
我没有看到list
本节中提到的词。
搜索“列表理解”,提供的第 10 个命中为:
领悟(部分)
从...开始,
理解提供了一种通用且强大的方法来构造数组。
提到数组似乎意味着 Python 风格的列表推导可以用 Julia 数组来完成。
下一个标题是生成器表达式
理解也可以不用封闭的方括号来编写,从而产生一个称为生成器的对象。
这听起来很像 Python 风格的生成器。
Julia 的开发人员是否认为 Julia 的数组(1-dim)本质上等同于 Python 列表?
解决方案
TL;DR:是的,但更快。
@StefanKarpinski,Julia 的联合创始人,在这里发表了以下评论
另一个区别是您在 Python 中使用了一个集合,在 Julia 中使用了一个数组(Python 称之为“列表”)
所以根据 Stefan 的说法,“数组”(可能意味着一维数组)是“Python 称之为‘列表’的东西”</p>
举个简单的例子,假设我们要求P
1000 万个比率的乘积 ,R
其中每一项的分子是4n^2
,每一项的分母比分子 小一R = num/(num - 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 倍以上。
Julia 中的生成器怎么样?
prod
只需删除函数调用内的方括号:
julia> P = prod(4n^2/(4n^2 - 1) for n in 1:10_000_000)
1.5707962875404267
朱莉娅的答案在我的笔记本电脑上是即时的。
这不是 Python 和 Julia 之间的速度比较,所以我将在这一点上离开 Python。
Julia 的2n
for2 * n
是一个不错的功能。例如,尝试2P
:
julia> 2P
3.1415925750808533
见这里。
推荐阅读
- javascript - 没有从以编程方式构建的表中触发 onclick 事件
- tfs - 自动关闭所有已完成任务的故事
- c# - 显示视图中每个身份用户的第一个角色
- android - MVVMCross System.AggregateException 6.4 Xamarin Android
- java - 枚举可以是两个阶段的一部分吗?
- markdown - 有没有办法在 Markdown 中格式化对话?
- python - 用于提取数字的 Python3 正则表达式
- flutter - 如何重用 Stateful Widget?
- javascript - 未检测到 echarts 4.3.0 数据缩放事件
- c# - 是否可以在内存中创建电子表格并将其提供给链接而不将其保存在服务器端?