给定一个表,其中第一列是经过某个参考点的秒数,第二列是任意测量值:
6 0.738158581
21 0.801697222
39 1.797224596
49 2.77920469
54 2.839757536
79 3.832232283
91 4.676794376
97 5.18244704
100 5.521878863
118 6.316630137
131 6.778507504
147 7.020395216
157 7.331607129
176 7.637492223
202 7.848079136
223 7.989456499
251 8.76853608
278 9.092367123
...
Run Code Online (Sandbox Code Playgroud)
如您所见,在不规则的时间点对测量结果进行采样.我需要通过在每次测量之前将读数平均最多100秒来平滑数据(在Python中).由于数据表很大,因此最好使用基于迭代器的方法.不幸的是,经过两个小时的编码后,我无法找到高效优雅的解决方案.
谁能帮我?
编辑小号
我希望每个原始读数都有一个平滑的读数,平滑的读数是原始读数的算术平均值和前100(delta)秒中的任何其他读数.(约翰,你说得对)
巨大的~1e6 - 10e6线+需要使用紧RAM
数据大致是随机游走
数据已排序
我测试了J Machin和yairchu提出的解决方案.他们都给出了相同的结果,但是,在我的数据集中,J Machin的版本呈指数级,而yairchu的版本是线性的.以下是由IPython的%timeit(以微秒为单位)测量的执行时间:
data size J Machin yairchu
10 90.2 55.6
50 930 258
100 3080 514
500 64700 2660
1000 253000 5390
2000 952000 11500
Run Code Online (Sandbox Code Playgroud)
谢谢大家的帮助.
如果我有时间序列数据 - {x,y}对的列表 - 并想要平滑它,我可以像这样使用指数移动平均线:
EMA[data_, alpha_:.1] :=
Transpose @ {#1, ExponentialMovingAverage[#2, alpha]}& @@ Transpose@data
Run Code Online (Sandbox Code Playgroud)
你将如何实现双指数平滑?
DEMA[data_, alpha_, gamma_] := (* unstub me! *)
Run Code Online (Sandbox Code Playgroud)
如果它本身可以找出alpha和gamma的良好值,那就太好了.
关于如何处理时间序列中存在间隙的情况的相关问题,即样本未随时间均匀分布:
是否有可能在Java swing应用程序中调整字体平滑?
这是一些比较:

差异并不大,但如果你看得足够近,Adobe Story(以及许多其他Flash应用程序)具有更强大和更好的平滑性.
我用Java编写文本编辑器,我希望在JTextPane和JLabels上的应用程序中实现这种平滑.
我正在研究一个显示移动划艇的小程序.以下显示了一个简单的示例代码(Python 2.x):
import time
class Boat:
def __init__(self, pace, spm):
self.pace = pace #velocity of the boat in m/s
self.spm = spm #strokes per minute
self.distance = 0 #distance travelled
def move(self, deltaT):
self.distance = self.distance + (self.pace * deltaT)
boat1 = Boat(3.33, 20)
while True:
boat1.move(0.1)
print boat1.distance
time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,船只有一个步速和每分钟行数.每次move(deltaT)调用该方法时,它都会根据速度移动一定距离.
上面的船只是以恒定的速度行进,这是不现实的.真正的划艇在行程开始时加速,然后在划桨叶片离开水后减速.在线有许多图表显示了典型的划船曲线(此处显示的力,速度看起来相似):
资料来源:highperformancerowing.net
速度应该随着时间的推移而保持不变,但它应该在中风期间发生变化.
将恒定速度改变为曲线的最佳方法是什么(至少基本上)类似于更逼真的划船冲程?
注意:有关如何更好地标记此问题的任何想法?这是算法问题吗?
我有几个数据点似乎适合通过它们拟合样条曲线.当我这样做时,我会得到一个相当凹凸不平的合身,比如过度拟合,这不是我理解为平滑的.
是否有一个特殊的选项/参数来恢复像这里一样非常平滑的样条曲线的功能.
的的使用penalty参数smooth.spline没有任何明显的效果.也许我做错了?
这是数据和代码:
results <- structure(
list(
beta = c(
0.983790622281964, 0.645152464354322,
0.924104713597375, 0.657703886566088, 0.788138034115623, 0.801080207252363,
1, 0.858337365965949, 0.999687052533693, 0.666552625121279, 0.717453633245958,
0.621570152961453, 0.964658181346544, 0.65071758770312, 0.788971505000918,
0.980476054183113, 0.670263506919246, 0.600387040967624, 0.759173403408052,
1, 0.986409675965, 0.982996471134736, 1, 0.995340781899163, 0.999855895958986,
1, 0.846179233381267, 0.879226324448832, 0.795820998892035, 0.997586607285667,
0.848036806290156, 0.905320944437968, 0.947709125535428, 0.592172373022407,
0.826847031044922, 0.996916006944244, 0.785967729206612, 0.650346929853076,
0.84206351833549, 0.999043126652724, 0.936879214753098, 0.76674066557003,
0.591431233516217, 1, 0.999833445117791, 0.999606223666537, 0.6224971799303,
1, 0.974537160571494, 0.966717133936379
), inventoryCost = c(
1750702.95138889,
442784.114583333, 1114717.44791667, 472669.357638889, 716895.920138889,
735396.180555556, 3837320.74652778, 872873.4375, 2872414.93055556, …Run Code Online (Sandbox Code Playgroud) 我想显示一个由创建的图,geom_smooth()但是对我来说,能够描述如何创建该图很重要。
我可以从文档中看到,当n> = 1000时,使用gam作为平滑函数,但是我看不到使用了多少个结或使用哪个函数生成了平滑。
例:
library(ggplot2)
set.seed(12345)
n <- 3000
x1 <- seq(0, 4*pi,, n)
x2 <- runif(n)
x3 <- rnorm(n)
lp <- 2*sin(2* x1)+3*x2 + 3*x3
p <- 1/(1+exp(-lp))
y <- ifelse(p > 0.5, 1, 0)
df <- data.frame(x1, x2, x3, y)
# default plot
ggplot(df, aes(x = x1, y = y)) +
geom_smooth()
# specify method='gam'
# linear
ggplot(df, aes(x = x1, y = y)) +
geom_smooth(method = 'gam')
# specify gam and splines
# Shows …Run Code Online (Sandbox Code Playgroud) 我有一个黑色的背景,并希望在内部添加一个块,从简单的CSS渐变到透明到0.7白色:
linear-gradient(to right,
hsla(0, 0%, 100%, 0),
hsla(0, 0%, 100%, 0.76) 14%,
hsla(0, 0%, 100%, 0.76)
)
Run Code Online (Sandbox Code Playgroud)
但这看起来很糟糕:
我找到的唯一方法是手动添加其他颜色停止.
background: linear-gradient(
to right,
hsla(0, 0%, 100%, 0),
hsla(0, 0%, 100%, 0.05) 2%,
hsla(0, 0%, 100%, 0.09) 3%,
hsla(0, 0%, 100%, 0.2) 5%,
hsla(0, 0%, 100%, 0.57) 11.5%,
hsla(0, 0%, 100%, 0.69) 14%,
hsla(0, 0%, 100%, 0.75) 16.5%,
hsla(0, 0%, 100%, 0.76) 17.5%,
hsla(0, 0%, 100%, 0.77)
);
Run Code Online (Sandbox Code Playgroud)
它看起来好多了:
是否有更简单的方法使颜色停止时CSS渐变平滑?
我正在尝试使用 LOWESS 来平滑以下数据:
我想获得一条平滑的线来过滤掉数据中的尖峰。我的代码如下:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import HourLocator, DayLocator, DateFormatter
from statsmodels.nonparametric.smoothers_lowess import lowess
file = r'C:...'
df = pd.read_csv(file) # reads data file
df['Date'] = pd.to_datetime(df['Time Local'], format='%d/%m/%Y %H:%M')
x = df['Date']
y1 = df['CTk2 Level']
filtered = lowess(y1, x, is_sorted=True, frac=0.025, it=0)
plt.plot(x, y1, 'r')
plt.plot(filtered[:,0], filtered[:,1], 'b')
plt.show()
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,出现以下错误:
ValueError: view limit minimum -7.641460199922635e+16 小于 1 并且是无效的 Matplotlib 日期值。如果您将非日期时间值传递给具有日期时间单位的轴,则通常会发生这种情况
我的数据中的日期格式为 07/05/2018 00:07:00。我认为问题在于 LOWESS 正在努力处理日期时间数据,但不确定?
你能帮我么?
我一直在努力使用补间来使 Python 中的鼠标移动平滑,我目前正在尝试自动化一些重复性任务。
我尝试使用补间去除一些在没有应用平滑的情况下发生的粗糙度,但是这样做我失去了明显的准确性,因为我的dy和dx值被number我最终得到了余数。这可能会因获得可以解决greatest common factor在我的两个值(因为两者dx并dy需要由同一分number)不幸的是这导致了过小的GCD的。
由于鼠标无法移动屏幕上像素的其余部分,因此我最终会明显降低精度。
问题:如何对鼠标移动应用补间,而不会失去准确性?
import pytweening
import win32api
import win32con
from time import sleep
dy = [50, 46, 42, 38, 33, 29, 24, 20, 15, 10, 10]
dx = [-35, 6, -55, -43, 0, 17, 29, 38, 42, 42, 38]
while True:
count = 0
values = [(pytweening.getPointOnLine(0, 0, x, y, 0.20)) for x, y in zip(dx, dy)]
while win32api.GetAsyncKeyState(win32con.VK_RBUTTON) and win32api.GetAsyncKeyState(win32con.VK_LBUTTON): …Run Code Online (Sandbox Code Playgroud) 我正在根据声学标签检测对河流中的鱼类深度进行建模(这意味着数据并不完全是完美间隔的连续时间序列)。我预测,深度会根据河流的空间位置而有所不同,因为不同的区域有不同的可用深度,一天中的不同时间,因为深度对光有反应,一年中的一天也有相同的原因,并且个体之间也有所不同。那么基本模型就是
深度 ~ s(lon, lat) + s(小时) + s(yday) + s(ID, bs="re")
有几百万次检测,所以模型很糟糕,所以
bam(深度 ~ s(经度、纬度) + s(小时) + s(yday) + s(ID, bs="re")
每个人的深度应该与之前的记录自相关(当然这取决于它最后一次注册的时间,但我不太知道如何解释时间上的离散间隔)。
我知道 rho 参数在 bam 中用作一种 corAR1 函数,我想这可以解释自相关。我还考虑将 lag(深度,by=ID) 作为预测变量,它的表现相当好,但我不确定这种方法的有效性。
我跟踪了几个面包屑发现 rho 可以从没有相关结构的模型中估计 rho<-acf(resid(m1),plot=FALSE)$acf 2 -
对于每个人,我添加了一个 ARSTART 变量来调用 AR.start = df$ARSTART 来考虑个体之间不同的时间序列 - 所以我的模型是
m2<-bam(depth~s(lon, lat)+s(yday)+s(hour, bs="cc")+s(fID, bs="re"), AR.start=df$ARSTART, discrete=T, rho=rho, data=df)
Run Code Online (Sandbox Code Playgroud)
一切都进展顺利,根据 AIC,具有自相关结构的模型拟合得更好(更好),但效果的后验估计非常不准确(或缩放比例很差)。与没有结构的模型相比,根据 lon、lat 平滑器的空间效应变得极端(且均匀),其中空间平滑器似乎非常有效地捕获空间方差,表明它们被预测在较深的区域中更深且在较浅的区域较浅。
如果需要,我可以提供示例代码,但问题本质上是,与模型相比,自相关结构会如此显着地改变后验估计的值是否有意义,并且时间自相关结构是否吸收了所有方差是否与空间效应相关(在具有自相关结构的模型中似乎被否定)?
一些想法-我不知道什么是最好的:
非常感谢所有帮助-非常感谢