Python中文
首页
教程
问答
标签
搜索
登录
注册
FSharp运行我的算法比Python慢
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>几年前,我通过动态编程解决了一个问题:</p> <p><a href="https://www.thanassis.space/fillupDVD.html" rel="noreferrer">https://www.thanassis.space/fillupDVD.html</a></p> <p>解决方案是用Python编写的。</p> <p>作为拓展视野的一部分,我最近开始学习OCaml/F。有什么比直接将我用Python编写的命令代码移植到F#来测试waters更好的方法呢?从这里开始,逐步走向函数式编程解决方案。</p> <p>第一个结果,直接端口。。。令人不安:</p> <p>在Python下:</p> <pre><code> bash$ time python fitToSize.py .... real 0m1.482s user 0m1.413s sys 0m0.067s </code></pre> <p>根据FSharp:</p> <pre><code> bash$ time mono ./fitToSize.exe .... real 0m2.235s user 0m2.427s sys 0m0.063s </code></pre> <p>(如果你注意到上面的“mono”:我也在Windows下进行了测试,使用Visual Studio-同样的速度)。</p> <p>我是。。。至少可以说是困惑。Python运行代码的速度比F#快?使用.NET运行时编译的二进制文件比Python的解释代码运行得慢?!?!</p> <p>我知道VMs(本例中是mono)的启动成本,以及jit如何改进Python之类的语言,但仍然。。。我期待的是加速,而不是减速!</p> <p>我可能做错什么了吗?</p> <p>我已经在这里上传了代码:</p> <p><a href="https://www.thanassis.space/fsharp.slower.than.python.tar.gz" rel="noreferrer">https://www.thanassis.space/fsharp.slower.than.python.tar.gz</a></p> <p>注意,F#代码或多或少是Python代码的直接逐行翻译。</p> <p>当然还有其他好处,例如F#提供的静态类型安全性——但是如果命令式算法的结果速度在F#下更差。。。至少可以说,我很失望。</p> <p><strong>编辑</strong>:根据评论中的要求直接访问:</p> <p>Python代码:<a href="https://gist.github.com/950697" rel="noreferrer">https://gist.github.com/950697</a></p> <p>FSharp代码:<a href="https://gist.github.com/950699" rel="noreferrer">https://gist.github.com/950699</a></p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>正如Jon Harrop所指出的,简单地使用<code>Dictionary(HashIdentity.Structural)</code>构造字典可以显著提高性能(在我的计算机上是3倍)。这几乎可以肯定是为了获得比Python更好的性能而需要进行的微创更改,并使代码保持习惯性(而不是用结构等替换元组),并与Python实现并行。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
区分轴上的像素大小
8 回答
区分过度拟合与良好预测
4 回答
区分通过POST接收的数据并在Cherrypy中获取
5 回答
区分重写和重载
8 回答
区分金贾二号的类型
5 回答
区别:IF IN和IF==python
4 回答
区别:list.append()与incrementequal?
6 回答
区别:创建在启动wx应用程序时不“阻止”控制台的脚本
3 回答
区别于python中的命令行和CGI
10 回答
区别关系
5 回答
区别是什么APIClient.enforce\ csrf\检查以及APIClient.handler.enforce\ csrf\ u检查
9 回答
区块.draw()未在python空闲模式下工作
5 回答
区块链API调用输出对象名称而不是内容
1 回答
区块链nonce值随负载变化
5 回答
区块链Python语法错误(Snakecoin)
7 回答
区块链不连接到服务器和矿工
7 回答
区块链信息钱包支票支付员
3 回答
区块链和区块链密码错误
9 回答
区块链尝试向Transaction字典添加键/值以创建区块链
7 回答
区域:IOError:[Errno 22]无效模式('w')或filenam
6 回答