使用列表推导从元组列表列表中创建矩阵

PyR*_*red 3 python numpy list-comprehension matrix

我有一个元组列表列表 list1

list1 = [[('a',0.01),('b',0.23),('c',1e-7)],
      [('a',0.91),('b',0.067),('c',0.38)]]
Run Code Online (Sandbox Code Playgroud)

我想创建一个numpy矩阵,其中每一行都是元组的第二个值list1.因此矩阵,我们称之为A,将形成

A = [[0.01,0.23,1e-7],[0.91,0.067,0.38]]
A.shape
>>> (2,3)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经设法以缓慢而低效的方式实现这一目标

A = []
for i in range(len(list1)):
    A.append(np.array([v for k,v in list1[i]]))
A = np.array(A)
Run Code Online (Sandbox Code Playgroud)

如何使用列表理解来完成此操作?

ayh*_*han 5

你需要嵌套的列表推导:

np.array([[tup[1] for tup in lst] for lst in list1])
Out: 
array([[  1.00000000e-02,   2.30000000e-01,   1.00000000e-07],
       [  9.10000000e-01,   6.70000000e-02,   3.80000000e-01]])
Run Code Online (Sandbox Code Playgroud)

更好的解决方案是:

np.array(list1)[:,:,1].astype('float')
Out: 
array([[  1.00000000e-02,   2.30000000e-01,   1.00000000e-07],
       [  9.10000000e-01,   6.70000000e-02,   3.80000000e-01]])
Run Code Online (Sandbox Code Playgroud)