说我想在python中创建一个1,000,000两个数组(不是列表),如下所示:
array = [2, 2, 2, ...... , 2]
这样做的快速而简单的方法是什么?
答案 0 :(得分:12)
当前接受的答案不是使用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的比例......
答案 1 :(得分:7)
这就是你要追求的吗?
# slower.
twosArr = array.array('i', [2] * 1000000)
# faster.
twosArr = array.array('i', [2]) * 1000000
您只需输入一个列表:
twosList = [2] * 1000000
- 已编辑 -
我更新了这个以反映另一个答案中的信息。通过略微调整语法,您可以将速度提高~9:1。完全归功于@ john-machin。我不知道你可以像对列表一样对数组对象进行多次复制。
答案 2 :(得分:3)
使用timeit模块,您可以找出执行此操作的最快:
首先,将多个数字放在列表中将最有可能杀死您的计算机,因为它会将其存储在内存中。
但是,您可以使用类似的方法测试执行情况。在我放弃之前,它在我的电脑上运行了很长时间,但我在一台旧电脑上:
timeit.Timer('[2] * 1000000').timeit()
您可以查看的另一个选项是使用efficient arrays of numeric values
模块,如{1}}所述
array.array('i', (2 for i in range(0, 1000000)))
我没有测试两者的完成时间,但我确信专为数字集设计的array
模块会更快。
编辑:更有趣的是,你可以看看实际上执行速度最快的array:
from numpy import *
array( [2 for i in range(0, 1000000)])
评论更快:
a = 2 * ones(10000000)
Awesmoe!
答案 3 :(得分:2)
混合方法对我来说最快
$ python -m timeit -s"import array" "arr = array.array('i', [2]*100) * 10000"
100 loops, best of 3: 5.38 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]) * 1000000"
10 loops, best of 3: 20.3 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*10) * 100000"
100 loops, best of 3: 6.69 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*100) * 10000"
100 loops, best of 3: 5.38 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*1000) * 1000"
100 loops, best of 3: 5.47 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*10000) * 100"
100 loops, best of 3: 6.13 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*100000) * 10"
10 loops, best of 3: 14.9 msec per loop
$ python -m timeit -s"import array" "arr = array.array('i', [2]*1000000)"
10 loops, best of 3: 77.7 msec per loop
答案 4 :(得分:1)
aList = [2 for x in range(1000000)]
或基于chauncey链接
anArray =array.array('i', (2 for i in range(0,1000000)))
答案 5 :(得分:0)
如果初始值不必非零并且您的平台上有/ dev / 0可用,则以下内容比阵列快4倍('L',[0])*大小溶液:
myarray = array.array('L')
f = open('/dev/zero', 'rb')
myarray.fromfile(f, size)
f.close()
问题How to initialise an integer array.array object with zeros in Python我正在寻找更好的方法。