问题描述
TSS的计算方式为MDToolbar
,可以很容易地计算出是否容易获得所有数据。但就我而言,数据一直在不断流传输,因此我需要计算此数据上的移动TSS。例如,假设整个数据为(x - mean) **2
。但是这些数据是成批流的,就像这样:
x=np.array([1,2,3,4,5,6,7,8,9,10])
在这种情况下如何计算移动TSS?任何合乎逻辑的解释以及解决方案将受到高度赞赏
解决方法
TSS可以分为两个术语,每个术语都可以轻松地递增计算:
TSS = sum [(X-sum [X] / N) 2 ]
= sum [X 2 -2X * sum [X] / N + sum [X] 2 / N 2 ] >
= sum [X 2 ]-2sum [X] 2 / N + sum [X] 2 / N
= sum [X 2 ]-sum [X] 2 / N
您只需要维护X和X 2 的运行总计,以及到目前为止您已经看到的样本数N。
,您可以在每个步骤中将每个批次添加到累积数组中:
cum_array = numpy.concatenate((cum_array,batch))
然后将TSS计算为:
tss = (cum_array - numpy.mean(cum_array))**2
每次都会重写TSS数组。如果您只是想添加新计算的值,则需要类似以下内容的
cum_array = numpy.concatenate((cum_array,batch))
tss = numpy.concatenate((tss,numpy.zeros_like(batch)))
tss[-batch_len:] = (cum_array[-batch_len:] - numpy.mean(cum_array))**2
编辑:如果您只想在每批末尾输入TSS值,则可以执行以下操作:
running_total += numpy.sum(batch)
N += len(batch)
tss = (batch[-1] - running_total/N)**2