不带括号的数组列表

时间:2019-09-02 17:48:37

标签: python-3.x list numpy numpy-ndarray

给出以下格式的数组列表:

[array([[63371.29484043],
    [65000.        ],
    [51114.1118643 ],
    [39000.        ],
    [61549.2893635 ],
    [58204.43242583]]), array([[28750.        ],
    [19166.90102574],
    [19667.19108884],
    [17250.        ]]), array([[32188.01786071],
    [33625.        ],
    [23988.53674308],
    [29354.92883394],
    [31657.26571235],
    [20175.        ]])]`

我想将其打印为列表,例如不带方括号。

a = [18758.98675732, 23418.72996313 ... 20134.77503711]

我可以套用.tolist,但不能去除内括号。

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:1)

在过多担心显示细节之前,请尝试了解对象的性质。显示从列表的结构开始。请特别注意len(用于列表)和shape(用于数组)。

In [119]: alist=[np.array([[63371.29484043], 
     ...:     [65000.        ], 
     ...:     [51114.1118643 ], 
     ...:     [39000.        ], 
     ...:     [61549.2893635 ], 
     ...:     [58204.43242583]]), np.array([[28750.        ], 
     ...:     [19166.90102574], 
     ...:     [19667.19108884], 
     ...:     [17250.        ]]), np.array([[32188.01786071], 
     ...:     [33625.        ], 
     ...:     [23988.53674308], 
     ...:     [29354.92883394], 
     ...:     [31657.26571235], 
     ...:     [20175.        ]])]    

您有一个形状不同的数组列表:

In [120]: len(alist)                                                                                         
Out[120]: 3
In [121]: [x.shape for x in alist]                                                                           
Out[121]: [(6, 1), (4, 1), (6, 1)]

您可以展平每个数组,生成形状为(6,),(4,)和(6,)的数组:

In [122]: [x.ravel() for x in alist]                                                                         
Out[122]: 
[array([63371.29484043, 65000.        , 51114.1118643 , 39000.        ,
        61549.2893635 , 58204.43242583]),
 array([28750.        , 19166.90102574, 19667.19108884, 17250.        ]),
 array([32188.01786071, 33625.        , 23988.53674308, 29354.92883394,
        31657.26571235, 20175.        ])]

hstack可以将它们加入数组。如果您希望将列表作为最终结果,请使用.tolist()

In [123]: np.hstack(_)                                                                                       
Out[123]: 
array([63371.29484043, 65000.        , 51114.1118643 , 39000.        ,
       61549.2893635 , 58204.43242583, 28750.        , 19166.90102574,
       19667.19108884, 17250.        , 32188.01786071, 33625.        ,
       23988.53674308, 29354.92883394, 31657.26571235, 20175.        ])

由于数组在第一维上不同,因此我们也可以使用:

In [127]: np.vstack(alist).shape                                                                             
Out[127]: (16, 1)
In [128]: np.vstack(alist).ravel() 

答案 1 :(得分:0)

您可以使用map获取每个子列表的第一个数字并展平该数组,然后使用list将其变成一个列表:

list(map(lambda l : l[0], a))

输出:

[18758.98675732, 23418.72996313, 23625.0, 14175.0, 21015.48300191, 20134.77503711]

您还可以使用numpy的多维数组索引仅提取每个子列表的第一个数字:

list(a[:, 0])

答案 2 :(得分:0)

Numpy具有内置的展平功能:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel.html

list(a[0].ravel())