2016-09-10 50 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很高兴知道! –

相关问题