2016-04-12 67 views
0

我有一个python字典与n_keys其中每个值是一个二维数组(dim1,dim2)。 我想将其转换为(dim1,dim2,n_keys)的3D numpy数组。 如何在没有大量嵌套循环的情况下快速完成工作?如何将python字典转换为3D numpy数组?

编辑: 例子:

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

那么'钥匙'根本不用?你只是想将'values'数组收集到一个3d数组中? – hpaulj

回答

4

dict -ionaries是无序的,所以你可能不想简单地堆叠起来,但你可以简单地用array3d = np.dstack(somedict.values())但堆栈内的值。

下面是一些例子情况:

>>> 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]]])