我有一个每小时下雨的测量系列,每小时一个寄存器
我需要每天累积雨量的输出
我正在尝试下面的代码。第一天没事,但第二天又没事
数据= [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)
答案 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]#第三天...
......