如何从具有矩阵值的字典中提取列数据?

时间:2017-02-14 06:19:23

标签: python numpy dictionary matrix scipy

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

Dictionary image

1 个答案:

答案 0 :(得分: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。但其他方面也一样。