2011-04-15 58 views
15

我得到一個大的陣列(12萬像素的圖像)在從Python標準庫陣列格式。 因爲我想那些陣列上執行操作,我想將其轉換爲numpy的陣列。 我試過如下:高效蟒陣列numpy的陣列轉換

import numpy 
import array 
from datetime import datetime 
test = array.array('d', [0]*12000000) 
t = datetime.now() 
numpy.array(test) 
print datetime.now() - t 

我得到一個或兩個秒的結果:相當於Python中的循環。

是否有這樣做的轉換更有效的方式?

+0

什麼是你的數據的實際來源?它是否必須通過數組類型? – 2011-04-15 09:48:17

+0

我的源代碼是我無法修改的lib。我無法改變它使用numpy。 – Simon 2011-04-15 09:57:19

回答

34
np.array(test)          # 1.19s 

np.fromiter(test, dtype=np.int)      # 1.08s 

np.frombuffer(test)         # 459ns !!! 
+0

謝謝!我正在考慮像'frombuffer'這樣的東西。 – Simon 2011-04-15 10:08:24

+0

dang,我從緩衝區不知道!謝謝! – 2011-04-15 17:46:25

+0

還有什麼可以算作'緩衝'嗎?所有numpy都說「是一個公開緩衝區接口的對象。」有沒有使用這種墮落,如果不是爲什麼不np.array內部使用它? – 2011-04-15 17:48:11