在python中初始化整数数组的最快方法是什么?
假设我想用python创建一个1000000个2的数组(不是列表),如下所示:在python中初始化整数数组的最快方法是什么?,python,arrays,integer,Python,Arrays,Integer,假设我想用python创建一个1000000个2的数组(不是列表),如下所示: array=[2,2,2,…,2] 什么是快速而简单的方法呢?这就是你想要的吗 # slower. twosArr = array.array('i', [2] * 1000000) # faster. twosArr = array.array('i', [2]) * 1000000 您可以通过以下内容获得一个列表: twosList = [2] * 1000000 --编辑-- 我更新了这个,以在另一个答案
array=[2,2,2,…,2]
什么是快速而简单的方法呢?这就是你想要的吗
# slower.
twosArr = array.array('i', [2] * 1000000)
# faster.
twosArr = array.array('i', [2]) * 1000000
您可以通过以下内容获得一个列表:
twosList = [2] * 1000000
--编辑--
我更新了这个,以在另一个答案中反映信息。通过稍微调整语法,似乎可以将速度提高9:1。全部学分属于@john machin。我不知道你可以像对列表一样对数组对象进行多重化
aList = [2 for x in range(1000000)]
或者基于昌西链接
anArray =array.array('i', (2 for i in range(0,1000000)))
使用该模块,您可以大致了解执行此操作的最快方式:
首先,在列表中放入这么多数字很可能会杀死你的机器,因为它会将它存储在内存中
但是,您可以使用类似这样的方法来测试执行。在我放弃之前,它在我的电脑上运行了很长时间,但我使用的是一台旧电脑:
timeit.Timer('[2] * 1000000').timeit()
您可以研究的另一个选项是使用模块,如前所述,有效的数值数组
array.array('i', (2 for i in range(0, 1000000)))
我没有测试两者的完成时间,但我确信为数字集设计的array
模块会更快
编辑:更有趣的是,你可以看看哪个执行速度最快:
from numpy import *
array( [2 for i in range(0, 1000000)])
从评论中可以更快地看到:
a = 2 * ones(10000000)
太棒了 当前接受的答案不是使用
array.array
的最快方法;至少它不是最慢的——比较一下:
[source: johncatfish (quoting chauncey), Bartek]
python -m timeit -s"import array" "arr = array.array('i', (2 for i in range(0,1000000)))"
10 loops, best of 3: 543 msec per loop
[source: g.d.d.c]
python -m timeit -s"import array" "arr = array.array('i', [2] * 1000000)"
10 loops, best of 3: 141 msec per loop
python -m timeit -s"import array" "arr = array.array('i', [2]) * 1000000"
100 loops, best of 3: 15.7 msec per loop
这是一个大约9:1的比率…混合方法对我来说最快
$ python -m timeit -s"import array" "arr = array.array('i', [2]*100) * 10000"
100 loops, best of 3: 5.38 msec per loop
如果初始值不必为非零,并且您的平台上有/dev/zero可用,则以下速度大约是阵列('L',[0])*大小解决方案的4.7倍:
myarray = array.array('L')
f = open('/dev/zero', 'rb')
myarray.fromfile(f, size)
f.close()
在这个问题上,我正在寻找一种更好的方法。我几乎不知道Python,但它可能是类似于
array=[2 for x In 1..1000000]
的东西吗?前面的这个问题可能会有所帮助-@mmyers:您的建议是无效的语法;您的意思可能是[2代表x范围内的x(1000000)]
<代码>[2]*1000000会更快更简单;然而,它们产生了一个列表
-数组
,列表
在Python中的含义是不同的。@John:mmyers说他实际上不懂Python。所以,别再挑剔了:)当然感谢你的建议。@Vijay Dev:请不要把“教育”和“挑剔”混为一谈。如果@mmyers要问一个问题,我很乐意提供手册和教程的参考资料。谁会欣赏这些建议呢?Numpy还有专门的工厂功能:a=2*one(1000000)
@Philipp:太棒了!这就是我如此爱你的原因。对回答问题的好奇心让我学到了很多东西。干杯:-)如果你不能将百万元素列表或数组放入你的机器的内存,它已经死了。而且,我不明白“它在我的电脑上运行了很长时间”。。。查看我的答案(a)如何在命令提示符下使用timeit
进行简单计时(b)测量的时间(毫秒!)有多小(4岁的笔记本电脑运行Win XP SP2)+1,我已使用其他语法和注释更新了我的答案。谢谢你指出。斯洛:)。。。这两个版本的混合版本更好
myarray = array.array('L')
f = open('/dev/zero', 'rb')
myarray.fromfile(f, size)
f.close()