2017-02-14 97 views
0

我有一个字典,其中的值是3列矩阵。我想提取每个值的第三列并将它们并排连接在一个矩阵中。我无法弄清楚如何做到这一点,因为一般切片将无法在字典上工作。字典甚至会是存储这些数据的最佳方式,还是大熊猫会更好?我试过做清单(my_dict.values()),但这似乎不工作了。运行python 3.6。如何使用矩阵值从字典中提取列数据?

Dictionary image

回答

1
In [1]: dd = {'one':np.arange(12).reshape(4,3),'two':np.arange(12).reshape(4,3)*2} 

如果按键的顺序并不重要:

In [3]: dd.values() 
Out[3]: 
dict_values([array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]), array([[ 0, 2, 4], 
     [ 6, 8, 10], 
     [12, 14, 16], 
     [18, 20, 22]])]) 

不是我们想(在PY3)

In [4]: np.array(dd.values()) 
Out[4]: 
array(dict_values([array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]), array([[ 0, 2, 4], 
     [ 6, 8, 10], 
     [12, 14, 16], 
     [18, 20, 22]])]), dtype=object) 

list(values())看起来不错 - 让名单可以以不同方式连接的阵列

In [5]: np.array(list(dd.values())) 
Out[5]: 
array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]], 

     [[ 0, 2, 4], 
     [ 6, 8, 10], 
     [12, 14, 16], 
     [18, 20, 22]]]) 

In [7]: np.array(list(dd.values()))[:,:,2] 
Out[7]: 
array([[ 2, 5, 8, 11], 
     [ 4, 10, 16, 22]]) 

np.concatenate(list(dd.values()),axis=0)制作一个2d数组而不是3d,所以[:,2]应该是1d而不是2d。但其他明智的一样。