我有一个我想解决的情况。我有一个阵列中的气候模型数据,该模型的纬度和经度网格点有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)
我的问题是:重塑这种方式吗?它会以正确的顺序重新安排事情吗?如果没有(或者即便如此)还有另一种(可能不那么笨拙的方式吗?)
感谢。
答案 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. ]])