2016-04-12 35 views
0

私は、各値が2D配列(dim1、dim2)であるn_keysを持つpython dictを持っています。 これを(dim1、dim2、n_keys)の3D numpy配列に転送したいと思います。 ネストされたループがなくても、どうすれば高速に処理できますか?python dictを3D numpy配列に変換するには?

EDIT: 例:あなたはおそらく、単にそれらをスタックする必要はありませんが、あなたは、単にarray3d = np.dstack(somedict.values())にもかかわらず、値を積み重ねることができるように

featureMatrix = np.empty((len(featureDict.values()[0]), 
     len(featureDict.values()[0][0,:]), 
     len(featureDict.keys()))) 

for k,keys in enumerate(featureDict.keys()): 
    value=featureDict[keys] 
    for i in range(0,len(value[:,0]),1): 
     for j in range(0,len(value[0,:]),1): 
      featureMatrix[i,j,k]=value[i,j] 
+1

私たちにサンプルケースを表示しますか? – Divakar

+0

'key'はまったく使用されていませんか? 'values'配列を1つの3D配列に集めたいだけですか? – hpaulj

答えて

4

dict -ionariesが順序付けられていません。

>>> somedict = dict(a = np.arange(4).reshape(2,2), 
        b = np.arange(4).reshape(2,2) + 10, 
        c = np.arange(4).reshape(2,2) + 100, 
        d = np.arange(4).reshape(2,2) + 1000) 

>>> array3d = np.dstack(somedict.values()) 
>>> array3d.shape 
(2, 2, 4) 
>>> array3d # unordered because of dict unorderedness, order depends for all practical purposes on chance 
array([[[ 10, 0, 1000, 100], 
     [ 11, 1, 1001, 101]], 

     [[ 12, 2, 1002, 102], 
     [ 13, 3, 1003, 103]]]) 

またはあなたはそれが辞書のキーでソートスタックしたい場合:ここで

は、いくつかの例の場合である

>>> array3d = np.dstack((somedict[i] for i in sorted(somedict.keys()))) 
>>> array3d # sorted by the keys! 
array([[[ 0, 10, 100, 1000], 
     [ 1, 11, 101, 1001]], 

     [[ 2, 12, 102, 1002], 
     [ 3, 13, 103, 1003]]]) 
関連する問題