对于这个有点令人困惑的标题我很抱歉,但我不知道如何更清楚地总结这一点.
我有两组X,Y数据,每组都对应一般的整体值.它们是从原始数据中相当密集地采样的.我正在寻找的是一种为任何给定Y找到插值X的方法,用于我已经拥有的集合之间的值.
该图表使这一点更加清晰:

在这种情况下,红线来自对应于100的集合,黄线来自对应于50的集合.
我希望能够说,假设这些集合对应于一个值的梯度(即使它们显然由离散的X,Y测量值组成),我如何找到,例如,如果Y为500,X将在何处对于一个相当于75的值的集合?
在这里的例子中,我希望我想要的点在这附近:

我不需要这个功能过于花哨 - 它可以是数据点的简单线性插值.我只是在思考它时遇到了麻烦.
注意,两组的Xs和Ys都不完全重叠.然而,说"这些集合中最接近的X点在哪里"或"这些集合中最接近的Y点在哪里"是相当微不足道的.
我已经在已知值之间使用了简单的插值(例如,对于设置"50"和"100",找到相应Y的X,然后将它们平均得到"75"),我最终会看到如下所示:

很明显我在这里做错了.显然,在这种情况下,对于Y高于"最低"集的最大Y的所有情况,X(正确地)返回0.事情开始很好,但是当一个人开始接近最低Y时,它开始变得干扰.
我很容易理解为什么我的错了.这是另一种查看问题的方法:

在"正确"的版本中,X应该是大约250.相反,我正在做的基本上是平均400和0,所以X是200.在这种情况下如何解决X?我当时认为双线性插值可能会得到答案,但是我已经能够找到的任何内容都清楚地说明了我是如何去做这类事情的,因为它们似乎都是针对不同的问题而构建的.
谢谢您的帮助.请注意,虽然我已经在R中明显地绘制了上述数据,以便于查看我正在谈论的内容,但最终的工作是在Javascript和PHP中.我不是在找重物; 简单就是更好.
我有一个这样的进度条视图:
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"/>
Run Code Online (Sandbox Code Playgroud)
它持续3秒,那么如何使用插值器进行平滑更新?
ObjectAnimator animation = ObjectAnimator.ofInt(what_is_in_here?);
animation.setDuration(3000); // second
animation.setInterpolator(new DecelerateInterpolator());
animation.start();
Run Code Online (Sandbox Code Playgroud)
我非常感谢你的帮助.非常感谢你提前.
我想问你一些双线性插值/缩放细节.我们假设我们有这个矩阵:
|100 | 50 |
|70 | 20 |
Run Code Online (Sandbox Code Playgroud)
这是一个2 x 2灰度图像.现在,我想将它缩放两倍,我的矩阵看起来像这样:
| 100 | f1 | 50 | f2 |
| f3 | f4 | f5 | f6 |
| 70 | f7 | 20 | f8 |
Run Code Online (Sandbox Code Playgroud)
所以如果我们想计算f4,计算定义为
f1 = 100 + 0.5(50 - 100) = 75
f7 = 70 + 0.5(20 - 70) = 45
Run Code Online (Sandbox Code Playgroud)
现在终于:
f4 = 75 + 0.5(45 - 75) = 60
Run Code Online (Sandbox Code Playgroud)
但是,我无法真正理解f3或f1适合的计算
我们是否分别在每个方向进行双线性缩放?因此,这意味着:
f3 = 100 + …Run Code Online (Sandbox Code Playgroud) interpolation image image-processing linear-interpolation image-scaling
在浮点线性插值中,一位用户提出了以下实现lerp:
float lerp(float a, float b, float f)
{
return (a * (1.0 - f)) + (b * f);
}
Run Code Online (Sandbox Code Playgroud)
另一位用户提出了以下实现lerp:
float lerp(float a, float b, float f)
{
return a + f * (b - a);
}
Run Code Online (Sandbox Code Playgroud)
显然,由于浮点精度损失,后一种实现效果较差。
然后我查看了维基百科,它对前一个实现说:
float lerp(float a, float b, float f)
{
return (a * (1.0 - f)) + (b * f);
}
Run Code Online (Sandbox Code Playgroud)
对于后者:
float lerp(float a, float b, float f)
{
return a + f …Run Code Online (Sandbox Code Playgroud) 你知道Matlab interp1函数的任何C实现(只是'线性'函数)吗?我认识一个Java.
我有两个点(5,0.45)和(6,0.50)并且需要通过线性插值找到x = 5.019802时的值
但是如何在R中编码呢?
我得到了下面的代码,但只是得到一个图表insdeed.
x <- c(5,6)
y <- c(0.45,0.50)
interp <- approx(x,y)
plot(x,y,pch=16,cex=2)
points(interp,col='red')
Run Code Online (Sandbox Code Playgroud) 遇到问题.
我有一个表定义为保持每日国债收益率曲线的值.
这是一个非常简单的表,用于历史查找值.
有notibly在今年的表中的一些差距4,6,8,9,11-19和21-29.
该公式是在非常简单的计算年4它的0.5*Year3Value + 0.5*Year5Value.
问题是如何编写VIEW可以返回缺失年份的文件?
我可以在存储过程中完成它,但最终结果需要是一个视图.
我有数据库和时间数据.我想将数据插入特定的时间步长.
Id Time humid humtemp prtemp press t
1 2012-01-21 18:41:50 47.7 14.12 13.870 1005.70 -0.05277778
1 2012-01-21 18:46:43 44.5 15.37 15.100 1005.20 0.02861111
1 2012-01-21 18:51:35 43.2 15.88 15.576 1005.10 0.10972222
1 2012-01-21 18:56:28 42.5 16.17 15.833 1004.90 0.19111111
1 2012-01-21 19:01:21 42.2 16.31 15.986 1004.80 0.27250000
1 2012-01-21 19:06:14 41.8 16.47 16.118 1004.60 0.35388889
1 2012-01-21 19:11:07 41.6 16.51 16.177 1004.60 0.43527778
Run Code Online (Sandbox Code Playgroud)
我想通过插入以下时间步获得数据.
Id Time humid humtemp prtemp press t
1 2012-01-21 18:45:00 .... ... ..... .... .... …Run Code Online (Sandbox Code Playgroud) 我想在数据帧的变量中执行线性插值,其中考虑到:1)两点之间的时间差,2)获取数据的时刻以及 3)为测量变量而采取的个人。
例如在下一个数据框中:
df <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
Individuals=c(1,1,1,1,1,1,1,2,2,2),
Value=c(1, 2, 3, NA, 5, NA, 7, 5, NA, 7))
df
Run Code Online (Sandbox Code Playgroud)
我想获得:
result <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
Individuals=c(1,1,1,1,1,1,1,2,2,2),
Value=c(1, 2, 3, 4, 5, 6, 7, 5, 5.5, 6))
result
Run Code Online (Sandbox Code Playgroud)
我不能完全使用na.approx包的功能,zoo因为所有观察都不是连续的,一些观察属于一个人,其他观察属于其他人。原因是因为如果第二个人将第一次观察到NA而我将专门使用该功能na.approx,我将使用来自 的信息individual==1来插入NA的individual==2(例如,下一个数据帧将有此类错误)
df_2 <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
Individuals=c(1,1,1,1,1,1,1,2,2,2),
Value=c(1, 2, 3, NA, 5, NA, 7, NA, 5, 7))
df_2
Run Code Online (Sandbox Code Playgroud)
我试过使用这些包zoo和dplyr:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Run Code Online (Sandbox Code Playgroud)
但我不能 …
在 R 中搜索时间序列数据的线性插值时,我经常na.approx()从zoo包中找到要使用的建议。
然而,对于不规则的时间序列,我遇到了问题,因为插值在间隙数量上均匀分布,没有考虑该值的关联时间戳。
我找到了一个围绕使用的解决方案approxfun(),但我想知道是否有一个更干净的解决方案,最好基于tsibble具有tidyverts包系列函数的对象?
以前的答案依赖于通过填补空白将不规则日期网格扩展为规则网格。然而,当插值期间应考虑白天时,这会导致问题。
这是一个(修订后的)最小示例,其中包含 POSIXct 时间戳而不是仅日期:
library(tidyverse)
library(zoo)
df <- tibble(date = as.POSIXct(c("2000-01-01 00:00", "2000-01-02 02:00", "2000-01-05 00:00")),
value = c(1,NA,2))
df %>%
mutate(value_int_wrong = na.approx(value),
value_int_correct = approxfun(date, value)(date))
# A tibble: 3 x 4
date value value_int_wrong value_int_correct
<dttm> <dbl> <dbl> <dbl>
1 2000-01-01 00:00:00 1 1 1
2 2000-01-02 02:00:00 NA 1.5 1.27
3 2000-01-05 00:00:00 2 2 2
Run Code Online (Sandbox Code Playgroud)
有什么想法如何(有效)处理这个问题吗?感谢您的支持!