在python中初始化整数数组的最快方法是什么?

在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 --编辑-- 我更新了这个,以在另一个答案

假设我想用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
--编辑--

我更新了这个,以在另一个答案中反映信息。通过稍微调整语法,似乎可以将速度提高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()