我有一个大小(214,144)的数组。我需要它(214,144,1)有没有办法在Python中轻松完成这项工作?基本上尺寸应该是(天,时间,站)。由于我只有1个站点的数据,因此维度为1.然而,如果我还可以使代码足够灵活,那么说2个站点会很好(例如将维度大小从(428,288)更改为(214,144) ,2))那将是伟大的!
答案 0 :(得分: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)
1)要向任意维度的数组a
添加维度:
b = numpy.reshape (a, list (numpy.shape (a)) + [1])
<强>解释强>
您获得a
的形状,将其转换为列表,将1
连接到该列表,并将该列表用作reshape
操作中的新形状。
2)要指定尺寸的细分,并自动计算最后尺寸的大小,请使用-1
作为最后尺寸的尺寸。 e.g:
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))