最近很多小伙伴都在问我可以自动计算tcl中某些数据的移动平均值吗?和我可以自动计算tcl中某些数据的移动平均值吗这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展awk计算数据的和和
最近很多小伙伴都在问我可以自动计算 tcl 中某些数据的移动平均值吗?和我可以自动计算 tcl 中某些数据的移动平均值吗这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展awk 计算数据的和和平均值、MS Excel:每项费用过去 12 个月的移动平均值(带当前日期)、numpy.convolve的加权移动平均值、Python假设包:我可以确保使用某些值吗?等相关知识,下面开始了哦!
本文目录一览:- 我可以自动计算 tcl 中某些数据的移动平均值吗?(我可以自动计算 tcl 中某些数据的移动平均值吗)
- awk 计算数据的和和平均值
- MS Excel:每项费用过去 12 个月的移动平均值(带当前日期)
- numpy.convolve的加权移动平均值
- Python假设包:我可以确保使用某些值吗?
我可以自动计算 tcl 中某些数据的移动平均值吗?(我可以自动计算 tcl 中某些数据的移动平均值吗)
如何解决我可以自动计算 tcl 中某些数据的移动平均值吗??
我编写了一个程序来计算某些数据的移动平均值。问题是我不能自动化,我的意思是如果我想通过 10 步或更多的步骤来完成这个过程,用交换条款写 10 行是不明智的。
按 4 步计算移动平均值的部分是:
set aux [lindex $line 4]
set T [lindex $line 1]
set aux1 [lrange $valores 1 1]
set valores [lreplace $valores 0 0 $aux1]
set aux1 [lrange $valores 2 2]
set valores [lreplace $valores 1 1 $aux1]
set aux1 [lrange $valores 3 3]
set valores [lreplace $valores 2 2 $aux1]
set aux1 [lrange $valores 4 4]
set valores [lreplace $valores 3 3 $aux1]
set valores [lreplace $valores 4 4 $aux]
set promP [avg $valores]
我知道我必须使用 for 循环,但我所做的尝试没有奏效。
解决方法
假设您对数据保持一个窗口,这并不太难。诀窍是制定一个程序来完成关键工作。
set WINDOW_SIZE 10
set storedData {}
proc updateMovingAverage {value} {
global storedData WINDOW_SIZE
set storedData [lreplace [list {*}$storedData $value] 0 end-$WINDOW_SIZE]
return [expr {[tcl::mathop::+ {*}$storedData] / double([llength $storedData])}]
}
或者你可以创建一个类:
oo::class create MovingAverage {
variable window size
constructor {{windowSize 10}} {
set window {}
set size $windowSize
}
method item {value} {
set window [lreplace [list {*}$window $value] 0 end-$size]
return
}
method average {} {
return [expr {[tcl::mathop::+ {*}$window] / double([llength $window])}]
}
}
该类将添加项目和计算平均值分开。后者现在是 Tcl 中的标准模式。添加项目的技巧是将项目附加到列表中,如果列表的前面大于所需的窗口,则修剪掉它; list {*}$thing $value
执行 append-an-item,而 lreplace THING 0 end-$wantedLength
执行前缀修剪(用空的项目序列替换它们)。
这是一个更高效的版本。
oo::class create MovingAverage {
variable window size index
constructor {{windowSize 10}} {
set window {}
set size $windowSize
set index 0
}
method item {value} {
lset window $index $value
set index [expr {($index + 1) % $size}]
return
}
method average {} {
return [expr {[tcl::mathop::+ {*}$window] / double([llength $window])}]
}
}
这使用的事实是,从 8.6 开始(完全巧合的是,当集成类时),lset
命令可以将项目附加到列表中。
一个协程版本,比如评论中提到的Donal:
[ServiceContract]
public interface IDiscoveryService
{
ValueTask<SaveDiscoveryResultResponse> SaveDiscoveryResultAsync(IAsyncEnumerable<SaveDiscoveryResultRequest> request);
}
它和类版本比标准 proc 版本(如 Donal 的第一个示例)有优势,因为它不依赖于任何全局变量,因此您可以同时计算具有不同窗口大小的多个不同数据集不同协程/对象中的时间。
awk 计算数据的和和平均值
awk 计算数据的和和平均值
本文译至:http://d.hatena.ne.jp/leetmikeal/20130117/1358423717
有如下的log文件:
最右边的数值表示数据。计算一下数据的和。
最开始的{} ,定义sum变量,累加数据。
最后,在END内 print sum 输出和.然后,计算一下平均值。
MS Excel:每项费用过去 12 个月的移动平均值(带当前日期)
将 AVERAGEIFS 与 EDATE 结合使用:
=AVERAGEIFS('Despenses'!E:E,'Despenses'!G:G,A2,'Despenses'!C:C,">="&EDATE(EOMONTH(TODAY(),-1)+1,-12))
numpy.convolve的加权移动平均值
我正在写一个使用numpy中的卷积函数的移动平均函数,它应该等效于(加权移动平均)。当我的权重全部相等时(如简单的算术平均值),它可以正常工作:
data = numpy.arange(1,11)numdays = 5w = [1.0/numdays]*numdaysnumpy.convolve(data,w,''valid'')
给
array([ 3., 4., 5., 6., 7., 8.])
但是,当我尝试使用加权平均值时
w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
而不是(对于相同的数据)3.667,4.667,5.667,6.667,…我希望,我得到
array([ 2.33333333, 3.33333333, 4.33333333, 5.33333333, 6.33333333, 7.33333333])
如果删除“有效”标志,则什至看不到正确的值。我真的很想对WMA和MA使用convolve,因为它可以使代码更整洁(相同的代码,不同的权重),否则我认为我必须遍历所有数据并进行切片。
有关此行为的任何想法吗?
答案1
小编典典您想要的是np.correlate
卷积运算中的第二个参数基本上被反转,因此您的预期结果将是np.convolve(data, w[::-1], ''valid'')
。
Python假设包:我可以确保使用某些值吗?
您可以使用@example
装饰器来确保正在测试某些示例。
这是hypothesis's quick start guide中的示例:
from hypothesis import given,example
from hypothesis.strategies import text
@given(text())
@example('')
def test_decode_inverts_encode(s):
assert decode(encode(s)) == s
在这里,@example('')
确保以空白字符串为例运行测试。
我还没有完全了解您的方案的详细信息,但是也许您可以根据自己的需要调整此示例。
关于我可以自动计算 tcl 中某些数据的移动平均值吗?和我可以自动计算 tcl 中某些数据的移动平均值吗的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于awk 计算数据的和和平均值、MS Excel:每项费用过去 12 个月的移动平均值(带当前日期)、numpy.convolve的加权移动平均值、Python假设包:我可以确保使用某些值吗?的相关信息,请在本站寻找。
本文标签: