對于影像處理,我需要一個用于 200 萬個 32 位字的陣列(陣列型別,而不是 numpy 陣列)。如果我使用類似的東西:
tb = array.array( 'i', ,(0,)*2000000)
它需要 126 毫秒。它很大,我什至不需要初始化陣列。我不知道 Python 內部原理,但我假設該陳述句會在 malloc()(記憶體分配器)和 free()(記憶體釋放器)上生成噸。
有沒有另一種方法來創建一個非常大的 Python 陣列?
uj5u.com熱心網友回復:
這做同樣的事情,但“應該”運行至少 10 倍,通過避免創建和爬行無界 Python 整數的數百萬元素元組的不必要費用:
>>> tb = array.array('i')
>>> tb.frombytes(b'\0' * 8_000_000)
>>> len(tb)
2000000
>>> all(i == 0 for i in tb)
True
注意:我假設您在一個平臺上運行,其中array型別代碼i表示 4 位元組整數型別(這就是我將您的 200 萬更改為 800 萬的原因)。這很有可能,但如果您不確定,那么需要稍微高級的代碼:
>>> tb = array('i')
>>> tb.frombytes(b'\0' * (2_000_000 * tb.itemsize))
當然,我的盒子上tb.itemsize有回報4。
uj5u.com熱心網友回復:
這要快得多,因為它不會創建一個長的臨時元組:
tb = array.array('i', (0,)) * 2000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361259.html
上一篇:Excel是否可以根據存在多個匹配項的唯一鍵查找記錄的資料,但根據條件僅回傳1條記錄?
下一篇:很難弄清楚陣列操作背后的邏輯
