2016-05-17 10 views
1

これは非常に古典的な質問ですが、多くの記事を読んだ後、私はそれを元に戻すことにしました。 問題:Pythonのカウンター辞書からnd numpyの配列に

私は意味のある整数キーで、大規模なデータセットからのカウンター辞書を持っている、と整数出現:

co = Counter({8046: 1360, 10046: 1248, 11046: 1024}) 

そして、私は単には、基本的な整数配列で終わるしたい

a = np.array([[8046,1360],[10046,1248],[11046,1024]]) 

この問題の特異性(または特異性の欠如は)私は整数キーを持っていることである、と私は構造化された配列を必要としません。次

dtype = dict(names = ['id','data'], formats=['i8','i8']) 
array = np.fromiter(iter(co.items()), dtype=dtype) 

a = [(8046, 1360) (10046, 1248) (11046, 1024)] 

で終わる、非常に満足ではない、それは、DTYPEの問題だけですか?どうもありがとう!

答えて

2

あなたはnumpyの配列に変換する前に、リストのリストにそれを回すことができます:

>>> np.array(list(co.items())) 
array([[ 8046, 1360], 
     [10046, 1248], 
     [11046, 1024]]) 
+0

はい!私はこれらのタイプとイテレータで自分を失って、基本を忘れてしまった。そのため、np.array(list())の組み合わせはdtypesを指定することを避けます。今、私はなぜ 'np.fromiter'がそれほど硬直しているのか見逃していますが、私は何かが欠落していると思います。ありがとう@kennytm。 – Etienne

+0

私が間違っていない場合は、 'list(co.items())の代わりに単純な' co.items() 'で十分です。 – JRodDynamite

+1

@JRodDynamite 'np.array(co.items())'は2D配列の代わりにオブジェクトの配列を作成します。 'array(dict_items([(8046、1360)、(10046、1248)、(11046,1024)])、dtype = object)' – kennytm

関連する問題