使用numpy.reshape()添加维度

时间:2017-07-05 17:37:35

标签: python arrays numpy reshape

我有一个我想解决的情况。我有一个阵列中的气候模型数据,该模型的纬度和经度网格点有480个月的条目(详情无关紧要)。也就是说,我有一个带有尺寸(480,lat,lon)的numpy数组。

我需要在每个空间网格点创建年度平均值。我喜欢这样做的方法是使用numpy.reshape()制作尺寸为(4 / 4,12,12,lat,lon)的4D数组(其中我将时间步长分组为12,并重新包装它们,因为它是。然后我将沿第二轴(np.mean(dat_new, axis = 1))进行平均。

整件事就是

dat_new = np.reshape(dat, (dat.shape[0]/12, 12, dat.shape[1], dat.shape[2]))
dat_annual_mean = np.mean(dat_new, axis = 1)

我的问题是:重塑这种方式吗?它会以正确的顺序重新安排事情吗?如果没有(或者即便如此)还有另一种(可能不那么笨拙的方式吗?)

感谢。

2 个答案:

答案 0 :(得分:0)

您应首先置换尺寸,以便按正确顺序重新整形数据。

dat_new=np.reshape(np.transpose(dat,(1,2,0)),
                   (dat.shape[1],dat.shape[2],dat.shape[0]//12, 12))
dat_annual_mean = np.mean(dat_new, axis = 3)

即。它将为您提供一个尺寸(纬度,经度,480/12)的数组,如有必要,您可以进一步调换。

答案 1 :(得分:0)

简化,所以我们可以看到整个数组,这是我认为你想要做的事情:

In [608]: arr = np.zeros((3*4,2),int)
In [609]: arr[:,0]=np.arange(12)
In [610]: arr
Out[610]: 
array([[ 0,  0],
       [ 1,  0],
       [ 2,  0],
       [ 3,  0],
       [ 4,  0],
       [ 5,  0],
       [ 6,  0],
       [ 7,  0],
       [ 8,  0],
       [ 9,  0],
       [10,  0],
       [11,  0]])
In [611]: arr.reshape(3,4,2)
Out[611]: 
array([[[ 0,  0],
        [ 1,  0],
        [ 2,  0],
        [ 3,  0]],

       [[ 4,  0],
        [ 5,  0],
        [ 6,  0],
        [ 7,  0]],

       [[ 8,  0],
        [ 9,  0],
        [10,  0],
        [11,  0]]])
In [612]: _.mean(axis=1)
Out[612]: 
array([[ 1.5,  0. ],
       [ 5.5,  0. ],
       [ 9.5,  0. ]])