python - numpy 的每日平均值

标签 python numpy mean

我有一个像这样的屏蔽 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/

相关文章:

python - StreamingHttpResponse : return database connection to pool/close it

python - python 打印输出不一致

python - numpy.unique 保留顺序

python - Pandas:计算 Z 分数以避免 "look ahead"偏差

python - numpy:高效,大点产品

python - 'no such table' 错误

python - 如何在 Python 中使用具有 'None' 值的 numpy?

java - 在java中传递数组来获取平均中位数和众数

python - 在pygame中循环移动对象

python - 如何在Python中 reshape 列表中的多个数组