2016-05-30 13 views
0

データセットに2ワードごとのデータ共起を格納するdefaultdictがあります。私はすべてのペアがデータセットに存在するわけではないので、疎な表現を得るためにこのosを実行しており、したがっていくつかのメモリ空間を節約しています。デフォールトディクティックをnumpy行列または2次元行列のCSVに変換する

可能であれば、このdefaultdictnumpy行列に変換できる標準機能がいくつかあります。私はdictをnumpy配列に変換する方法を認識しています。しかし、私は、defaultdictをmatrixに変換するより効率的な方法を探しています。

defaultdictをCSVに変換する標準機能がないので、numpyを使用してcsvをロードできます。

を編集しました - 私はパンダを使用して回避策を見つけました。私はdefaultdictをDataFrameに変換し、DFをnumpy行列に変換します。これ以上の方法はありますか?

しかし、悲しいことに、これはメモリの節約に役立ちません。あなたのデータを仮定

+0

デフォルトのdictの例を挙げることができますか?期待される出力は? –

+0

すでに存在する値にアクセスする場合、 'defaultdict'は通常の' dict'と同じです。この 'dict'のキーと値は何ですか?言葉や索引?どのような配列レイアウトが必要ですか? @ Ericの答えが合わない場合は、辞書と目的の配列(おそらくまばらなもの)の小さな例を教えてください。 – hpaulj

+0

辞書の辞書から疎な行列を構築することについて。 http://stackoverflow.com/questions/27770906/why-are-lil-matrix-and-dok-matrix-so-slow-compared-to-common-dict-of-dicts – hpaulj

答えて

1

次のようなものになります:あなたが使用したい

data = defaultdict(int) 
data[0,0] = 10 
data[1,1] = 100 

scipy.sparse.coo_matrix:少し奇妙な出力を提供します

items = list(data.items()) # list only needed for python3 
vs = [v for (i,j), v in items] 
ii = [i for (i,j), v in items] 
j j= [j for (i,j), v in items] 
matrix = scipy.sparse.coo_matrix((vs, (ii, jj)) 

>>> print matrix 
    (0, 0) 10 
    (1, 1) 100 

しかし、あなたはこれを扱うことができますあたかも密度の高い行列であるかのようにオブジェクトになります

+1

「dok」スパースもありますこれは 'dict'サブクラスです。キーは '(i、j)'タプルです。他のSOの質問では、 'dok'に値を追加する最も速い方法は、別の辞書からの' update'です。 – hpaulj

関連する問題