Numpy意味着使用For循环Python的大数组数据集

时间:2017-11-25 03:47:39

标签: python numpy for-loop mean

我有数组形式的大数据集,其排列方式如下:

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

但是出现了奇怪的结果。任何人?

2 个答案:

答案 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中的程序完全相同。