2017-04-03 158 views
0

我有一个列表numpy.ndarray(5,6)(总大小(5,6,5)),我想转换成列表的列表5。每个列表应该包含每个numpy.ndarray每行的信息。将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

你试过'.tolist()'吗? – DyZ

+0

这将转换整个ndarray到一个数组..我需要有每个ndarray行的列表。 基本上..类似于列表清单的列表.. 外(5,)中(6,)最后(5) –

+1

如果'arr'是(5,6,5)形状,'list(arr)应该列出5(6,5)个数组。 'tolist()'将它转换为一路向下 - 列表列表。最底层的阵列应该有什么形状? – hpaulj

回答

0

d是3个阵列的列表。 list(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]]