2011-04-15 14 views
15

私は大きな配列(12Mpixの画像)をPythonの標準ライブラリから配列形式で取得します。 これらの配列に対して操作を実行したいので、numpy配列に変換したいと考えています。 私が試した次:Pythonでループに相当:効率的なpython配列から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 

私は1〜2秒の間に結果を取得します。

この変換を効率的に行う方法はありますか?

+0

実際のデータソースは何ですか?それは配列の型に来る必要がありますか? –

+0

私のソースは私が変更できないライブラリです。私はそれをnumpyを使用するように変更することはできません。 – Simon

答えて

34
np.array(test)          # 1.19s 

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

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

ありがとう!私は 'frombuffer'のようなものを考えていました。 – Simon

+0

ダング、私はfrombufferについて知らなかった!ありがとう! –

+0

「バッファ」として数えられるものは他にありますか?すべてのnumpyは、「バッファインタフェースを公開するオブジェクト」と言います。これを使用することには何らかの欠点がありますか?そうでない場合、なぜnp.arrayが内部的に使用しないのですか? –