我有数组形式的大数据集,其排列方式如下:
Rainfal amount arranged in array form
使用此方法声明计算轴= 0时每个纬度和经度的平均值或平均值:
Lat=data[:,0]
Lon=data[:,1]
rain1=data[:,2]
rain2=data[:,3]
--
rain44=data[:,44]
rainT=[rain1,rain2,rain3,rain4,....rain44]
mean=np.mean(rainT)
结果是令人厌倦但需要时间计算,我期待使用For循环来简化计算。至于我使用的脚本是这样的:
mean=[]
lat=data[:,0]
lon=data[:,1]
for x in range(2,46):
rainT=data[:,x]
mean=np.mean(rainT,axis=0)
print mean
但是出现了奇怪的结果。任何人?
答案 0 :(得分:0)
首先,您可能打算让for
循环添加子数组,而不是继续用子数组的其他切片替换rainT
。只有最后一个分配很重要,因此代码平均一个子阵列rainT=data[:,45]
,它也没有正确数量的原始元素除以计算平均值。这两个错误都会导致奇怪的结果。
其次,numpy应该能够比Python for
循环更快地平均元素,因为它只是numpy在优化的本机代码中设计的那种东西。
第三,你的原始代码将一堆子数组复制到Python List中,然后要求numpy对其进行平均。你可以通过让numpy在没有复制的情况下对相关子阵列求和来获得更快的结果,如下所示:
rainT = data[:,2:] # this gets a view onto data[], not a copy
mean = np.mean(rainT)
计算所有降雨量值的平均值,就像原始代码一样。
如果您想要每个纬度或某些纬度的平均值,您需要采用不同的方式。您可以对阵列轴进行平均,但纬度和经度不是data[]
中的轴。
答案 1 :(得分:0)
谢谢朋友们,你们给了我这样的愿望。以下是@Jerry101的工作脚本创意,但我决定不应用Python Loop。新的声明将是这样的:
LAT1 =数据[:,0]
lon1 =数据[:,1]
rainT =数据[:,2:46] ---这是我早先失踪的步骤
mean = np.mean(rainT,axis = 1)* 24 - 每次平均每天降雨量
mean2 = np.array([LAT1,lon1,平均值])
mean2 = mean2.T
np.savetxt( '平均每日-rainfall.dat2',mean2,FMT = '%9.3f')
最后,结果与Fortran中的程序完全相同。