import array, itertools
a = array.array('B', itertools.repeat(0, 3715948544))
需要近7分鐘,以我的機器(6m44s)上運行。該計算機具有8 Gb的RAM,並使用CPython 3.4.3運行Linux。如何更快地獲得1字節無符號整型數據的類似數組的對象,最好使用Python標準庫? Numpy可以立即分配(小於1毫秒)。
import array, itertools
a = array.array('B', itertools.repeat(0, 3715948544))
需要近7分鐘,以我的機器(6m44s)上運行。該計算機具有8 Gb的RAM,並使用CPython 3.4.3運行Linux。如何更快地獲得1字節無符號整型數據的類似數組的對象,最好使用Python標準庫? Numpy可以立即分配(小於1毫秒)。
如果你真的不能使用NumPy的,你可以嘗試多遠,你可以用獲得的內置bytearray
:
a = bytearray(3715948544)
這應該在幾秒鐘最多完成。
這與從不同答案(大約1.95秒)的序列乘法一樣快。謝謝! – Pastafarianist
@Pastafarianist它仍然有與序列相乘的問題 - 在創建它之後,如果事情變得非常緩慢,您無法真正對巨型緩衝區進行任何有用的操作。 –
我剛剛測試過'bytearray' vs'array.array' vs'numpy'。在我的特殊情況下,'bytearray'是最快的,'array.array'是緊隨其後的,'numpy'的損失接近2倍。我正在運行一個特定的計算,這個數組基本上是一個巨大的計數器:I讀取值,添加+1,將其寫回並檢查它是否超出閾值。使用'bytearray'我得到約7.5秒/迭代,'array.array'約爲7.75秒,'numpy'爲14.6秒。 – Pastafarianist
a = array.array('B', [0]) * 3715948544
序列乘法,類似於如何創建一個巨大的零列表。請注意,任何你想要做與這個巨型陣列可能會像你最初的嘗試創建它。
這需要我的電腦2秒鐘左右。謝謝! – Pastafarianist
起初我還以爲numpy
將是最快的,但由斯文指出,bytearray
是相當快的10000嘗試在30億與bytearray
你的運氣了。
In [1]: import numpy as np
In [2]: import array, itertools
In [3]: %timeit array.array('B', itertools.repeat(0, 10000))
1000 loops, best of 3: 456 µs per loop
In [4]: %timeit np.zeros(10000, dtype='uint8')
1000000 loops, best of 3: 924 ns per loop
In [5]: %timeit bytearray(10000)
1000000 loops, best of 3: 328 ns per loop
Numpy當然是最好的解決方案,因爲它是唯一的解決方案,它可以讓你在創建數組後做實際的事情。 –
你爲什麼預先分配它? –
你應該放棄標準庫並使用[numpy](http://www.numpy.org/)代替 –
等待,如果你知道* NumPy可以解決你的問題,你爲什麼會問這個問題? – user2357112