我有一个像这样的屏蔽 numpy 数组:
数据=
[[0.0 8.51796269417e-06 0.271666675806]
[1800.0 -2.32499992847e-06 -0.279374957085]
[3600.0 5.99944460392e-06 -0.65399992466]
...,
[94602600.0 -- -1.56833326817]
[94604400.0 -- 0.414166599512]
[94606200.0 -- 1.50900006294]]
第一列中是时间(以秒为单位),其他列中我有一些数据。我想使用“numpy 方法”计算每日平均值。我成功地这样做了:
days = np.unique(data[:,0]//86400)
daily = np.empty((len(days),3))
for idx,day in enumerate(days): daily[idx,:] = np.mean(data[np.where(data[:,0]//86400 == day)],axis=0)
但是,我对此不满意,因为(1)我丢失了掩码,(2)我想避免循环并仅使用数组操作。
是否有一些有效的 numpy 脚本可以做到这一点? 谢谢
最佳答案
您可以按天 reshape 数据,然后仅沿所需的轴执行平均值。要做到这一点,最简单的方法是将数组剥离到整天(或者您可以将其填充到整天)。
# calculate number of complete days
nseconds = 94606200 - 94606200%86400
ndays = nseconds/86400
#calculate how many rows this corresponds to
nrows = (nseconds)/1800 # =52512
nrows_per_day = 86400/1800
new_array = orig_array[:nrows].reshape(ndays,nrows_per_day,3)
现在要获取每日平均值,您可以转置数组并仅在所需轴上执行平均值:
dailymean_1,dailymean_2 = new_array.transpose()[1:].mean(axis=1)
上面返回两个长度为ndays
的数组,其中分别包含原始数组中第1列和第2列的每日平均值。
关于python - numpy 的每日平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795068/