如何解决有没有更好的方法来使用 numpy 创建滚动扩展平均函数? [Python]
最近我做了一个函数来执行滚动扩展平均平均值(不确定这是否是最好的术语)。换句话说,我想创建一个向量,它是另一个向量元素的顺序平均值。例如,取向量 a = [1,2,2]
,此变换的结果向量将为 b = [1,1.5,1.67]
。
我想知道在 Numpy 中是否有更好的方法(无循环)。
这是我构建的函数:
def rolling_mean():
results = []
for n in range(1,len(X[:])+1):
results.append(np.expand_dims(np.mean(X[:n],axis = 2),-1))
return np.concatenate(results,axis = 2).shape
input:
array([107.82898848,104.20672962,101.11936848,95.5392514,99.25907138,88.30364673,95.78052502,91.88777602,92.94404695,91.43067756,97.80829905,88.04812676,86.30507539,84.34146879,88.78491822,83.77489231,82.72204444,78.90779523,78.73974639,80.6807543,76.1253219,80.17892777,83.44848362,85.16977125,88.63965418,85.36051447,84.49254174,80.36832368,78.98803082,80.7274235,77.71078257,75.89548114,73.07546659,69.81760824,67.27589733,66.95237855,63.12044925,63.58189569,68.6789082,70.92299637,69.96511396,66.70713942,64.04006182,69.28454443,69.16610418,66.76003564,67.10493197,74.06540923,74.19043057,76.14746791])
output:
array([107.82898848,106.01785905,104.38502886,102.17358449,101.59068187,99.37617601,98.86251159,97.99066964,97.42993379,96.83000816,96.9189437,96.17970895,95.42012176,94.6287894,94.23919799,93.58517888,92.94617098,92.16626121,91.45960254,90.92066013,90.21612021,89.75988419,89.48547547,89.30565446,89.27901445,89.12830291,88.95660805,88.64988361,88.31671627,88.06373985,87.72977348,87.35995185,86.92708866,86.42386865,85.87678375,85.35110583,84.75027727,84.1932146,83.79541187,83.47360148,83.14412618,82.75276935,82.31759011,82.02138452,81.73571163,81.41015345,81.10578704,80.9591125,80.82097613,80.72750597])
解决方法
尝试这样的事情:
>>> a.cumsum() / np.arange(1,len(a) + 1)
array([1.,1.5,1.66666667])
只检查较大的:
>>> a = np.array([107.82898848,104.20672962,101.11936848,95.5392514,99.25907138,88.30364673,95.78052502,91.88777602,92.94404695,91.43067756,97.80829905,88.04812676,86.30507539,84.34146879,88.78491822,83.77489231,82.72204444,78.90779523,78.73974639,80.6807543,76.1253219,80.17892777,83.44848362,85.16977125,88.63965418,85.36051447,84.49254174,80.36832368,78.98803082,80.7274235,77.71078257,75.89548114,73.07546659,69.81760824,67.27589733,66.95237855,63.12044925,63.58189569,68.6789082,70.92299637,69.96511396,66.70713942,64.04006182,69.28454443,69.16610418,66.76003564,67.10493197,74.06540923,74.19043057,76.14746791])
>>> a.cumsum() / np.arange(1,len(a) + 1)
array([107.82898848,106.01785905,104.38502886,102.1735845,101.59068187,99.37617601,98.86251159,97.99066964,97.42993379,96.83000816,96.9189437,96.17970895,95.42012176,94.6287894,94.23919799,93.58517889,92.94617098,92.16626121,91.45960254,90.92066013,90.21612021,89.75988419,89.48547547,89.30565446,89.27901445,89.12830291,88.95660805,88.64988361,88.31671627,88.06373985,87.72977348,87.35995185,86.92708866,86.42386865,85.87678375,85.35110583,84.75027727,84.1932146,83.79541187,83.47360148,83.14412618,82.75276935,82.31759011,82.02138452,81.73571163,81.41015345,81.10578704,80.9591125,80.82097613,80.72750597])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。