如何计算1000万条目的列的移动平均值?我试图在一个包含1000万行的列上运行以下公式来计算移动平均值,但脚本会一直运行并且jmp停止响应:thisTable << New Column(“av”,Numeric,Continuous,Formula(Mean( :x [Index(Row() - 99999,Row())])));公式是否存在任何限制或错误。在这种情况下,如何计算移动平均线?
Re:如何计算1000万条目的列的移动平均值?Col Moving Average()函数可以很容易地从公式中取出。 采用我在上一篇文章中第二个公式中提供的方法,通过对数据求和然后除法来计算移动平均值,将给出您想要的结果。 请确保您了解提供给您的代码的工作原理。 这是对公式的新修改:
If( Row() == 1,
theLag = 100000;
theSum = 0;
);
If(
Row() <= theLag,
theSum = theSum + :x;
theAvg = theSum/Row(),
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;
Re:如何计算1000万条目的列的移动平均值?此脚本在JMP12上不起作用(JMP12不支持Col移动平均线)Re:如何计算1000万条目的列的移动平均值?试试这个,看看它是否运行得更快
Col Moving Average( :x, 1, 999999, 0 )
查看脚本索引以获取文档和示例
或者,您可以尝试这样做,这样就无需计算每行计算的100000行列表的平均值,并将其减少为单个减法,单个加法和一个除法。
If( Row() == 1,
theLag = 100000;
theSum = Sum( :x[Index( 1, theLag )] );
);
If(
Row() < theLag, theAvg = <FONT color="#c7254e" face="Consolas" style="background-color: #f4f2f9;">Col Moving Average( :x, 1, theLag, 0 )</FONT>,
Row() == theLag, theAvg = theSum / theLag,
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;
Re:如何计算1000万条目的列的移动平均值?我尝试了建议的解决方案,但它没有给出正确的答案,canyu请帮忙
Re:如何计算1000万条目的列的移动平均值?你是对的,公式是错误的。 我没有正确设置“theSum”的值。 以下应该得到正确的结果:
If( Row() == 1,
theLag = 3;
theSum = 0;
);
If( Row() <= theLag,
theSum = theSum + :yield;
theAvg = theSum / Row();
,
theAvg = ((theSum - :yield[Row() - theLag]) + :yield) / theLag;
theSum = (theSum - :yield[Row() - theLag]) + :yield;
);
theAvg;
Re:如何计算1000万条目的列的移动平均值?是的,现在它不会抛出任何错误,但我必须检查它是否适用于1000万条目
Re:如何计算1000万条目的列的移动平均值?它应该适用于10,000,000行。
请回复您的测试结果。
这是公式的更快版本.....它不需要第二次计算Sum
If( Row() == 1,
theLag = 3;
theSum = 0;
);
If( Row() <= theLag,
theSum = theSum + :yield;
theAvg = theSum / Row();
,
theSum = (theSum - :yield[Row() - theLag]) + :yield;
theAvg = theSum / theLag;
);
theAvg;
Re:如何计算1000万条目的列的移动平均值?对于像我这样点和点击的人,您可以通过右键单击感兴趣列的标题并选择“新公式列”>行>移动平均值来获得列上的移动平均值。 您将不得不再次单击或两次来决定是否要使用加权,但是一旦我单击“确定”以模拟我的模拟10M行数据表,它就会非常快。
HTH
法案