将numpy ndarray列表转换为多个列表列表

时间:2017-04-03 03:04:41

标签: python list numpy

我有一个numpy.ndarray(5,6)(总大小(5,6,5))的列表,我想将其转换为5个列表。每个列表应包含每个numpy.ndarray的每一行的信息。

这样做的一种方法是手动操作,但这对于更大的numpy.ndarrays来说会变得很麻烦,耗时,所以我怎样才能有效地做到这一点?

示例:

>>> import numpy
>>> a = numpy.zeros((6,5))
>>> b = numpy.ones((6,5))
>>> c = numpy.ones((6,5))*2
>>> d = [a,b,c]
>>> print d
[array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]]), array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]]), array([[ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.]])]
>>> e = list(d)
>>> print e
[array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]]), array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]]), array([[ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.,  2.]])]
# not wanted
>>> print e[0].tolist()
[[0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0]]
#wanted
>>> [[0.0, 0.0, 0.0, 0.0, 0.0], [1,1,1,1,1], [2, 2, 2, 2, 2], ]

1 个答案:

答案 0 :(得分:0)

d是3个数组的列表。 list(d)不会改变任何事情。

e = np.array(d)将生成一个(3,6,5)3d数组。

In [37]: e=np.array(d)
In [38]: e.shape
Out[38]: (3, 6, 5)
In [39]: e[:,0,:]
Out[39]: 
array([[0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2]])
In [40]: list(e[:,0,:])
Out[40]: [array([0, 0, 0, 0, 0]), array([1, 1, 1, 1, 1]), array([2, 2, 2, 2, 2])]
In [41]: e[:,0,:].tolist()
Out[41]: [[0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [2, 2, 2, 2, 2]]