如何計算具有 1000 萬個條目的列的移動平均值?我正在嘗試在具有 1000 萬行的列上運行以下公式來計算移動平均值,但腳本一直在運行並且 jmp 停止響應:thisTable << New Column( "av", Numeric, Continuous, Formula( Mean( :x[Index( Row() - 99999, Row() )] ) ) );公式是否有任何限製或錯誤。 在這種情況下如何計算移動平均線?
腳本回复:如何計算具有 1000 萬個條目的列的移動平均值?對於像我這樣的點擊式人員,您可以通過右鍵單擊感興趣的列的標題並選擇“新公式列”>“行”>“移動平均線”來獲得列的移動平均線。您將不得不再點擊一兩次來決定是否要使用加權,但是一旦我為我的模擬 10M 行數據表點擊確定,它就非常快了。
HTH
賬單
回复:如何計算具有 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;
回复:如何計算具有 1000 萬個條目的列的移動平均值?是的,現在它不會拋出任何錯誤,但我必須檢查它是否適用於 1000 萬個條目
回复:如何計算具有 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;
回复:如何計算具有 1000 萬個條目的列的移動平均值?我嘗試了建議的解決方案,但沒有給出正確的答案,請幫忙
回复:如何計算具有 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;
回复:如何計算具有 1000 萬個條目的列的移動平均值?此腳本不適用於 JMP12(JMP12 不支持 Col Moving Average)回复:如何計算具有 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;