Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和R之间print函数的比较_Python_R_Performance - Fatal编程技术网

Python和R之间print函数的比较

Python和R之间print函数的比较,python,r,performance,Python,R,Performance,Python通常比R快得多,但是下面的代码在Python中比在R中花费更多的时间 # R for (i in 1:10000){print(i)} # It takes less than a second ############################################### # Python for i in xrange(10000): print i # It takes 5 minutes! 如何解释这种差异 注意:我的问题不是要知道如何提高代码的

Python通常比R快得多,但是下面的代码在Python中比在R中花费更多的时间

# R
for (i in 1:10000){print(i)}
# It takes less than a second

###############################################

# Python
for i in xrange(10000):
    print i
# It takes 5 minutes!
如何解释这种差异

注意:我的问题不是要知道如何提高代码的性能,而是“为什么Python在运行此代码时比R慢得多”。

结论: 造成这种情况的原因是,在python中,与
R
相比,写入stdout的速度非常慢,因此尝试写入stdout
10000次!在python中,可能看起来有点慢(忽略范围开销),但是一次打印就可以显著减少这一差距

此代码要快得多,因为它只向标准输出写入一次:

lst = []

for i in range(10000):
    lst.append(i)

print lst
但是,这并不是因为它向标准输出流写入10000次:

for i in range(10000):
    print i
还可以使用内存效率更高的
xrange()
函数,由于这些原因,只有python 2的
range()
函数被python 3中的
xrange()
函数所取代


必须指出的是,无论您的原始代码是什么,它只需要5-6秒而不是5分钟…

range(10000)
构建一个10000个元素的列表,而不仅仅是遍历数字。改用
xrange(10000)
。即使有
range
的开销,对我来说,该代码仍能在几分之一秒内运行。你用的是什么操作系统?我想你实际上是想了解一个大问题。看到这个问题而不是这个琐碎的问题可能会很好…特别是在R中,您可以只键入
print(1:10000)
。事实上,我想说的不是什么是在屏幕上打印所有这些数字的最有效方法,而是为什么Python在这段代码中比R慢。不过,我还是将
range
改为
xrange
,因为它不会改变我系统中的很多故事,Python只需要0.1秒。我怀疑问题是由于某种原因,您的终端速度慢。要确认这一点,请在xrange(10000):print i>output.txt中为i尝试
python-c”。如果速度快,那么不是打印速度慢,而是写入终端。