2016-09-10 47 views
0

我有一個大小爲(214,144)的數組。我需要它(214,144,1)有沒有一種方法可以在Python中輕鬆實現?基本上這些尺寸應該是(天,時間,站)。因爲我只有1個站點的數據,所以維度將是1。但是,如果我還可以使代碼具有足夠的靈活性,對於說2個站點來說會很好(例如將維度大小從(428,288)改變爲(214,144,2)))那太好了!如何在Python中將維度添加到numpy數組中

+2

從形狀改變'(428,288)''到(214,144,2)'沒有意義:你在那裏減少了元素的總數。你想要像(428,144,2)這樣的東西嗎? –

+0

是的,這就是我的意思!抱歉! 428,144,2 – HM14

回答

5

你可以使用reshape

>>> a = numpy.array([[1,2,3,4,5,6],[7,8,9,10,11,12]]) 
>>> a.shape 
(2, 6) 
>>> a.reshape((2, 6, 1)) 
array([[[ 1], 
     [ 2], 
     [ 3], 
     [ 4], 
     [ 5], 
     [ 6]], 

     [[ 7], 
     [ 8], 
     [ 9], 
     [10], 
     [11], 
     [12]]]) 
>>> _.shape 
(2, 6, 1) 

除了改變從(x, y)形狀來(x, y, 1),你可以使用(x, y/n, n)爲好,但你可能要指定列的順序取決於輸入:

>>> a.reshape((2, 3, 2)) 
array([[[ 1, 2], 
     [ 3, 4], 
     [ 5, 6]], 

     [[ 7, 8], 
     [ 9, 10], 
     [11, 12]]]) 
>>> a.reshape((2, 3, 2), order='F') 
array([[[ 1, 4], 
     [ 2, 5], 
     [ 3, 6]], 

     [[ 7, 10], 
     [ 8, 11], 
     [ 9, 12]]]) 
1

1)要向維度添加任意維度的數組a

b = numpy.reshape (a, list (numpy.shape (a)) + [1]) 

說明:

你得到的a的形狀,把它變成一個列表,串聯1到該列表,並使用該列表作爲新形狀的reshape操作。

2)要指定尺寸的細分並自動計算最後一個尺寸的尺寸,請使用-1作爲最後尺寸的尺寸。例如爲:

b = numpy.reshape(a, [numpy.size(a,0)/2, numpy.size(a,1)/2, -1]) 

b的在這種情況下的形狀將是[214,144,4]


(很明顯,你可以結合如有必要,這兩種方法):

b = numpy.reshape (a, numpy.append (numpy.array (numpy.shape (a))/2, -1)) 
+1

'np.expand_dims(a,-1)'做了這種'reshape',在末尾用'-1'參數添加一個新軸。沒有新的功能,但新的'np.stack'使用它來連接任何新軸上的數組。 – hpaulj

+0

感謝@hpaulj很高興知道! –

相關問題