2017-04-03 163 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]]