Data-Transformation
從移動平均線中提取數據點?
是否可以從移動平均數據中提取數據點?
換句話說,如果一組數據只有前30個點的簡單移動平均線,是否有可能提取出原始數據點?
如果是這樣,怎麼做?
對fabee的回答+1,這是完整的。根據我發現的用於執行手頭操作的包,只需將其翻譯成 R 即可。就我而言,我有 NOAA 三個月的溫度預測數據:1 月至 2 月至 3 月、2 月至 3 月至 4 月、3 月至 4 月至 5 月等,我想將其分解為(近似值)月值,假設每三個月的溫度基本上是一個平均值。
library (Matrix) library (matrixcalc) # Feb-Mar-Apr through Nov-Dec-Jan temperature forecasts: qtemps <- c(46.0, 56.4, 65.8, 73.4, 77.4, 76.2, 69.5, 60.1, 49.5, 41.2) # Thus I need a 10x12 matrix, which is a band matrix but with the first # and last rows removed so that each row contains 3 1's, for three months. # Yeah, the as.matrix and all is a bit obfuscated, but the results of # band are not what svd.inverse wants. a <- as.matrix (band (matrix (1, nrow=12, ncol=12), -1, 1)[-c(1, 12),]) ai <- svd.inverse (a) mtemps <- t(qtemps) %*% t(ai) * 3
這對我很有用。謝謝@fabee。
編輯:好的,將我的 R 翻譯回 Python,我得到:
from numpy import * from numpy.linalg import * qtemps = transpose ([[46.0, 56.4, 65.8, 73.4, 77.4, 76.2, 69.5, 60.1, 49.5, 41.2]]) a = tril (ones ((12, 12)), 2) - tril (ones ((12, 12)), -1) a = a[0:10,:] ai = pinv (a) mtemps = dot (ai, qtemps) * 3
(與 R 版本相比,它的調試時間要長得多。首先是因為我對 Python 不像對 R 那樣熟悉,還因為 R 在交互上更有用。)