《Ruby/YARV/Python跨平台性能对比测试报告》(附单词频率统计实例)

理性分析Python和Ruby哪个更有前途? 就第一语言而言,Ruby和Python是最受欢迎的。Ruby是非常流行的构建网站技术,其中最著名的是Twitter(早期版本),Basecamp,Github,Airbnb,Slideshare,Groupon。Ruby和Python都是面向对象的语言,都是动态和灵活的。这些技术的主要区别在于他们解决问题的方式。Ruby提供了不同的方法,而Python通常只有一个。这个事实既是优势也劣势。最流行的... 阅读详情

Ruby/YARV/Python跨平台性能对比测试报告
作者:Suninny   http://blog.youkuaiyun.com/rails

一、基本测试

Ruby代码:

def test
  count 
= Hash.new(0)
  File
.read('test.txt').split.each {|word| count[word] += 1 }
  p count
.to_a.sort_by{|x| x[1]}[-30, 30].reverse
end

if __FILE__ == $0
  t1 
= Time.now
  test
  puts t2 
= Time.now - t1
end

 Python代码:

from time import time
from operator import itemgetter

def test():
    count 
= {} 
    
for word in open("test.txt").read().split():
        
if count.has_key(word):
            count[word] 
= count[word] + 1
        
else:
            count[word] 
= 1
    
print sorted(count.iteritems( ), key=itemgetter(1), reverse=True)[0:30]

if __name__ == "__main__":
    t1 
= time()
    test()
    
print time()-t1

都蛮简洁的。由于Ruby支持带默认值的初始化,少了几行代码。

输出结果为:

[["the", 11345], ["of", 6538], ["to", 5496], ["and", 4611], ["a", 3509], ["in",2940], ["that", 2511], ["was", 2439], ["his", 2346], ["he", 1913], ["as", 1860], ["had", 1363], ["is", 1359], ["it", 1273], ["not", 1231], ["be", 1208], ["for", 1125], ["on", 1075], ["with", 1068], ["this", 1045], ["by", 878], ["The", 851], ["I", 840], ["have", 836], ["but", 806], ["which", 796], ["all", 787], ["their", 749], ["so", 747], ["at", 740]]

Ruby1.8.4@Win32耗时:0.641s
Python2.5@Win32耗时:0.310s;启用Psyco:0.249s
Ruby1.8.5@Cygwin:0.558s
Ruby-yarv@Cygwin:0.453s
Python2.5@Cygwin:0.312s;启用Psyco:0.246s
Ruby1.8.5@Ubuntu: 0.434s
Ruby-yarv@Ubuntu: 0.373s
Python2.5@Ubuntu:0.271s; Psyco: 0.196s


更新@2006.09.17, 19:03

刚发现Python也有类似于Ruby“默认值初始化”的特性,于是test()函数可以改为:

def test(): 
    count 
= {} 
    
for word in open("test.txt").read().split(): count[word] = 1 + count.get(word, 0) 
    
print sorted(count.iteritems( ), key=itemgetter(1), reverse=True)[0:30] 


二、加测内存占用情况

1、将测试文本扩大10倍,变成 9.5M,前面两个程序的时间和内存消耗分别为(括号中为psyco/yarv的分值):
ruby1.8.4@win32: 5.63,97M
ruby1.8.5@cygwin: 4.77s, 93M(3.84s, 95M)
ruby1.8.5@ubuntu: 3.78s, 91M (3.36s, 91M)
py2.5@win32: 2.51s, 65M(1.85s, 72M)
py2.5@cgwin: 2.58s, 80M(1.94s,110M)
py2.5@ubuntu:2.23s, 63M(1.42s, 63M)

2、因为两者用的都是将文件内容一次性读入数组的方法,所以内存占用量都很大,下面对其进行改进:

Ruby代码:

def test
  count 
= Hash.new(0)
  
for line in open("test.txt")
    
for word in line.split
      count[word] 
+= 1
    end
  end
  p count
.to_a.sort_by{|x| x[1]}[-30, 30].reverse
end

if __FILE__ == $0
  t1 
= Time.now
  test
  puts t2 
= Time.now - t1
end

Python代码:

from time import time
from operator import itemgetter

def test():
    count 
= {}
    
for line in open("test.txt"):
       
for word in line.split():
            count[word] 
= 1 + count.get(word, 0)
    
print sorted(count.iteritems(), key=itemgetter(1), reverse=True)[0:30]

if __name__ == "__main__":
    t1 
= time()
    test()
    
print time()-t1

输出为:

[('the', 113450), ('of', 65380), ('to', 54960), ('and', 46110), ('a', 35090), ('in', 29400), ('that', 25110), ('was', 24390), ('his', 23460), ('he', 19130), ('as', 18600), ('had', 13630), ('is', 13590), ('it', 12730), ('not', 12310), ('be', 12080), ('for', 11250), ('on', 10750), ('with', 10680), ('this', 10450), ('by', 8780), ('The', 8510), ('I', 8400), ('have', 8360), ('but', 8060), ('which', 7960), ('all', 7870), ('their', 7490), ('so', 7470), ('at', 7400)]

现在两个程序的时间和内存消耗分别为(括号中为psyco/yarv的分值):
ruby1.8.4@win32:7.3s,5M
ruby1.8.5@cygwin: 6.45s, 5M(6.04s, 5M)
ruby1.8.5@ubuntu: 4.25s, 3.2M(4.11s, 3.2M)

py2.5@win32: 2.34s, 3M(1.54s,5M)
py2.5@cygwin: 2.45s, 4M(1.74s, 6M)
py2.5@ubuntu: 2.25s, 1.7M(1.34s,1.8M)

注意:尽管Ruby的内存占用量只有原来的1/20,但速度也明显慢了下来;而Python内存占用一样骤减,速度也随之提升。

更新@2006.09.17, 22:50

这两个程序最后打印结果的那行都还可以稍稍作下改进:

Ruby的可以改为:

 p count.to_a.sort_by{|x| -x[1]}[0, 30]

Python的可以改用2.5版最新引入的nlargest()函数(新发现的很棒的东东,只是Ruby目前还未包含类似的函数,Ruby1.9也没看到,只有一个max_by):

print nlargest(30, count.iteritems(), key=itemgetter(1)) #from heapq import nlargest

更新@2006.09.18, 08:25    新增Ubuntu下的分值

Python经过这几年的发展,进步真的很大,不管是在性能还是标准库的扩充方面。而Ruby在这方面却令人有点失望,有时运行速度只及Python的1/3,YARV也形同虚设。值得注意的是两者在Ubuntu下的表现都不错,尤其是Ruby,有显著提升。
Python和Ruby哪个好? Ruby 和 Python十分相似,有很多共同点,但也有一些不同之外,以下是Python和Ruby的对比:1. Python和Ruby都是面向对象的语言,都是动态和灵活的。二者的主要区别在于他们解决问题的方式。Ruby提供了不同的方法,而Python通常只有一个,这既是优势也劣势。2. 最流行的Ruby框架是Ruby-on-Rails,跟Python的Django极其相似且同等高效,不过,如果开发... 阅读详情

相关推荐

Windows/Linux双平台实战:QtCreator构建套件配置全攻略(含GCC/G++/GDB/CMake)

本文详细介绍了在Windows和Linux双平台下配置QtCreator构建套件的完整流程,涵盖GCC/G++、GDB和CMake等核心工具链的设置技巧。通过分步指导和实用示例,帮助开发者解决跨平台开发中的配置难题,提升Qt应用开发效率。特别针对QtCreator新手和需要在多平台切换的开发者提供了全面的配置指南。

weixin_28836507的博客 470

YARV: 又一个ruby虚拟机

YARV的全名是 Yet Another Ruby VM, 由日本人SASADA Koichi 另外实现的ruby虚拟机 目前ruby的虚拟机是通过AST(abstract syntax tree) 来完成的,它的速度比较慢, 只能作一般纯脚本的解释工作, YARV的出现就是为了解决这个问题, 它是基于Stack VM来完成.主要的目的就是给ruby脚本提速 下面的图片显示了...

weixin_30558305的博客 342

FPGA图像处理之直方图均衡实现

直方图均衡的基本原理,就是对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行拉伸,而对像素个数较少的灰度值(即对画面不起主要作用的灰度值)进行合并,从而提高对比度,使图像清晰,达到增强的目的。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

FZWzsl的博客 1428

Ruby 2.x 源代码学习:YARV 虚拟机 指令

前言 YARV 大约有 90 多条指令,这些指令定义在 insns.def 文件中,编译 Ruby 源代码的时候会根据该文件生成 vm.inc 和 insns.inc 两个(include)文件,这两个文件会被包含在 Ruby 虚拟器核心代码里头 栈帧 虚拟机模拟物理机执行方法调用的方式, 每执行一个方法(or block)都会将一个 栈...

weixin_33671935的博客 305

基于PLC的立体车库控制系统设计

本文介绍了基于西门子S7-1511-1PN PLC和KTP700 Basic PN HMI的立体堆垛式停车场自动化控制系统。系统通过PLC逻辑控制滑台运动,配合传感器实现车辆存取自动化,包含初始化、入库、出库和安全保护程序。程序采用模块化设计,分为安全互锁、动画显示、模式切换等六个功能模块,运用边沿触发、定时器和多级联锁确保安全。HMI界面提供模式切换、车位选择、状态显示和手动控制功能。该系统具有模块化、安全性和可扩展性特点,可应用于多车位立体停车场场景。

sxs3030787796的博客 1263

RK3576 Buildroot 双机 ADB 异常排障实录:同版 `boot.img`,一台可识别一台不可识别

进程在跑”不等于“USB 枚举成功”,adbd存活只是必要不充分条件。生产环境中的全局别名可能反向污染系统脚本。shell 命令替换中的字符串问题,必须做字节级验证(od -tx1相比“改环境规避”,核心脚本对输入做鲁棒处理更可长期维护。

小灰灰的博客 211

python和ruby性能比较_Ruby和Python的比较

python和ruby的相同点:都强调语法简单,都具有更一般的表达方式。python是缩进,ruby是类basic的表达。都大量减少了符号。都是动态数据类型。都是有丰富的数据结构。都具有c语言扩展能力,都具有可移植性,比perl的可移植性更好。也都可以作为嵌入语言。都是面向对象的语言,都可以作为大项目的开发工具。都有丰富的库支持。也有最宽松的版权许可,除了一些工具属于GNU世界。都有lisp特色的...

weixin_42506994的博客 1465

34、木材在家具制造中的应用

本文详细探讨了木材在家具制造中的应用,从木材的选择、加工技术到设计创新和表面处理等方面进行了全面解析,并结合实际案例分析木材家具的市场趋势与未来发展。文章强调了木材家具在功能性、智能化和环保性方面的潜力,展示了其在现代家居生活中的重要地位。

flink9streamer的博客 242

Ruby 和 Python 相比有什么优势和缺陷?

转自:http://www.zhihu.com/question/19552194 知乎工程师 汪汪、Xana Hopper、yao long 等人赞同 Ruby 和 Python 太相似了,取舍大部分都是个人喜好上的原因。比如我就觉得 Python 的 “There is only one way to do it.” 比 Ruby 的 “There are many ways to do

shellching的专栏 7898

18、改进的LSTM用于污染物浓度预测

本文探讨了改进的长短期记忆网络(MLSTM)在空气污染预测中的应用,重点分析了其对印度泰米尔纳德邦五个城市(金奈、塞勒姆、哥印拜陀、马杜赖和图蒂科林)的PM2.5、PM10、SO2和NO2四种污染物浓度的预测效果。通过与传统LSTM模型的对比实验,结果显示MLSTM在预测准确性和执行效率方面均优于LSTM。研究结果表明,MLSTM在空气质量预测领域具有较高的应用潜力,可为环境保护和空气质量管理提供有力支持。

j0k1l2m3n的博客 175

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)

小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目标分辨率低、信息量不足,导致神经网络提取到的有效特征较少。第二,小目标在图像中所占的区域较小,易受背景干扰,这对算法的定位性能要求较高。第三,小物体标注困难,训练数据有限,导致模型泛化能力差。例如多尺度学习、无锚机制和生成对抗学习等方法,都能提高小目标检测的准确性和鲁棒性。为了改善小目标漏检现象严重的问题,我在 YOLOv8 中增加了 P2 检测头,相当于有四个检测头,使网络能检测到更小的目标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2857

python平台无关性_《Ruby/YARV/Python跨平台性能对比测试报告》(附单词频率统计实例)...

详情请进入我的博客,不足之处还望各位同学多多指正:http://blog.youkuaiyun.com/Rails/archive/2006/09/17/1232993.aspx)目 标:从一个文件中选出使用频率最多的30个单词Ruby代码:def testcount = Hash.new(0)for line in open("test.txt")for word in line.splitcount[w...

weixin_39666550的博客 131

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

新版YARV(基于Ruby 1.9.0 v2006-11-01)编译/安装/测试手记

昨晚作SVN例行更新时发现了这次变动。今天有空,作了个尝试:一、Win32平台下安装 cd /yarv-svn/win32 configure nmake(需要用到Bison,我用的是Cygwin带的) nmake install-nodoc默认会安装在当前盘符根目录下的/usr文件夹C:/usr/bin>ruby -vruby 2.0.0 (Base: Ruby 1.9.0

Rails.blogging { Gooday :here } 1541

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python和Ruby的对比,纠正一些误解

Python和Ruby的对比,纠正一些误解下面是我在看两篇关于Python和Ruby对比的文章时,所作的纠正,原文都是广泛流行的,比较好找。------------------------------------------------------《ruby和python的比较》更正一点事情1、文档、开源项目、库支持,这些东西Ruby不要跟Python比,不是几个数量级的问题,何必貌似并列的排

河边的小屋 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python和ruby性能比较_Python与Ruby比较

从三个方面:1.各自所适用于什么应用2.开发环境、运行环境3.可移植性如何,因为项目最后计划移植到手机平台,如windows CE Symbina现把调研的一些大致整理,对比一下Python与Ruby1.各自所适用于的应用场合查阅的结果似乎对于这两种语言的评价都很好,在网络开发上的性能都很好。都很适用于快速的应用程序开发,开发的效率很高。Python:摘取了跟项目有关的一些应用方面的叙述跨平台开发...

weixin_39683144的博客 682

Python 和 Ruby 的对比

(点击上方公众号,可快速关注) 来源:js信仰者 segmentfault.com/a/1190000010756033 如有好文章投稿,请点击 → 这里了解详情 最近在考虑学习一门后端语言,在ruby和python直接犹豫,然后自己做了一些对比,希望能帮到有同样问题的你。 一、异同对比选择 1、Python和ruby的相

Python开发者 3139

python和ruby性能比较_Python和Ruby两大语言全方位对比

不合点别的,提到unix对象。Red hat Linux的安装法度榜样一向是用Python写的,如不雅你刚巧用ubuntu,那么,那个提示你更新体系的法度榜样,也是用Python写的。与Python不合, 在Ruby中,…Strings是可以改变的。你可以应用常量(常量的值是不合改变的)。这里有些强迫规定的书写请求 (例如:class的名字以大年夜写字母开首, 变量名已小写字母开首)。这里只有...

weixin_39686192的博客 387

全面详解Python与Ruby,到底哪款更优秀

今天,我和大家讨论一下是Python开发语言web好还是Ruby开发语言web好,有需要的小伙伴,可以参考一下。对这方面有自己见解的大神,可以交流一下。希望大家可以认真阅读哦! Python 和 Ruby 都是目前用来开发 websites、web-based apps 和 web services 的流行编程语言之一。   这两种语言在许多方面有相似之处。它们都是高级的面向对象的

zyj66666的博客 6228

ruby和python性能比较_ruby和python的比较

python和ruby的相同点:都强调语法简单,都具有更一般的表达方式。python是缩进,ruby是类basic的表达。都大量减少了符号。都是动态数据类型。都是有丰富的数据结构。都具有c语言扩展能力,都具有可移植性,比perl的可移植性更好。也都可以作为嵌入语言。都是面向对象的语言,都可以作为大项目的开发工具。都有丰富的库支持。也有最宽松的版权许可,除了一些工具属于GNU世界。都有lisp特色的...

weixin_36444661的博客 936

玩了一下YARV

今天下载了YARV,在Linux上面编译安装好了,跑了一下,感觉很不错呀。非常期待包含YARV的Ruby2.0早日发布。 [quote] robbin@javaeye:~> ruby -v ruby 1.8.4 (2005-12-24) [x86_64-linux] robbin@javaeye:~> /usr/local/yarv/bin/ruby -v ruby 2.0.0 ...

robbin的专栏 259

编程语言 Ruby 如何还能再活 25 年?

点击上方“优快云”,选择“置顶公众号”关键时刻,第一时间送达!Ruby 创始人说:“我们要想尽一切办法活下去。”【优快云编者按】全球 Ruby 社区是友善与支持的代名词,人们用“Matz 人很好,所以我们也很友好”来形容它。多年来 Ruby 语言一直很流行,特别是那些需要处理大量繁重工作的初创公司。今年2 月份的时候,Ruby 举行了 25 周年庆,而Ruby 已经发展成熟,Ruby 的流行部

优快云资讯 3729

Python和Ruby两大语言全方位对比

最近在考虑学习一门后端语言,在Ruby和Python直接犹豫,然后自己做了一些对比,希望能帮到有同样问题的你。 一、异同对比选择 1、Python和ruby的相同点: 都强调语法简单,都具有更一般的表达方式。python是缩进,ruby是类basic的表达。都大量减少了符号。 都是动态数据类型。都是有丰富的数据结构。 都具有C语言扩展能力,都具有可移植...

weixin_33964094的博客 585
上一篇: [比较编程]Sorting in Ruby and Python
下一篇: 值得关注一下djangobook.com
懒懒阳光
博客等级 码龄21年 3粉丝 45原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值