Python初学者-以预定义的时间间隔求和

时间:2018-09-17 13:01:01

标签: python

我有一个每小时下雨的测量系列,每小时一个寄存器

我需要每天累积雨量的输出

我正在尝试下面的代码。第一天没事,但第二天又没事

数据= [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0。   0. 0. 0. 0. 0. 0.2 14. 0. 0. 0. 0. 0. 0. 0。   0.2 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.6 0. 0. 0。   0. 0. 0.2 0. 0. 0. 0. 0.6 0.2 4.2 0. 0. 0. 0.2   0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0。   0.]

b = 24#天窗口,可进行24次测量,每小时测量一次

x = np.arange(0,6133,1,int)

day = np.zeros((6132,1))

对于x中的i:

if i < b:
    day[i] = data[i]

else:
    cum_day = np.sum(day)

print(cum_day)

2 个答案:

答案 0 :(得分:1)

由于您已经具有NumPy数组,因此可以使用索引来过滤值。 x<b为您提供索引,其中x中的值低于b。您可以将这些索引作为x[]的参数传递,它仅给您一个小于b的值的子数组。 x[x>=b]为您提供大于或等于b的值,然后您将它们求和即可。如果这不是您想要的,请间隔24来解释您的意思。提供示例输入和输出

n = 10
b = n-1
x=np.arange(0,6133,1,int)

day = x[x<b]
cum_day = np.sum(x[x>=b])
print (cum_day)

输出

18803742

答案 1 :(得分:1)

如果我正确理解了您的问题,则只需要一个小数即可。

您有一个长度为6132的数组。长度不能被24整除。

所以我在您的数据后附加零,以使您的数据正好是256天的数据

data = [...] # 6132 hour datas in this array.
length = len(data) # it might be 6132
total_number_of_days = round(length/24 + 0.5) # number of days of your data
numpydata = np.array(data) # make a numpy array
numpydata = np.append(numpydata, [0]*(total_number_of_days*24-6132)) # append missing hours
datas_per_days = np.split(numpydata,total_number_of_days) # split array by number of days. (length of each row must be 24)
accumulated_rain_per_day = np.sum(datas_per_days,axis=1) # calculate rain per day...
print (accumulated_rain_per_day)

此代码将为您每天提供降雨数据。

accumulated_rain_per_day [0]#第一天

accumulated_rain_per_day [1]#第二天...

accumulated_rain_per_day [2]#第三天...

......