标签: linear-interpolation

如何在两组不规则数据之间插入点?

对于这个有点令人困惑的标题我很抱歉,但我不知道如何更清楚地总结这一点.

我有两组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中.我不是在找重物; 简单就是更好.

interpolation linear-interpolation

10
推荐指数
1
解决办法
6900
查看次数

Android:如何使用Interpolator制作水平进度条?

我有一个这样的进度条视图:

<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)

我非常感谢你的帮助.非常感谢你提前.

android linear-interpolation

10
推荐指数
1
解决办法
6960
查看次数

双线性图像插值/缩放 - 计算示例

我想问你一些双线性插值/缩放细节.我们假设我们有这个矩阵:

|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)

但是,我无法真正理解f3f1适合的计算

我们是否分别在每个方向进行双线性缩放?因此,这意味着:

f3 = 100 + …
Run Code Online (Sandbox Code Playgroud)

interpolation image image-processing linear-interpolation image-scaling

10
推荐指数
1
解决办法
2万
查看次数

这两个 lerp 函数有什么区别?

浮点线性插值中,一位用户提出了以下实现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)

c math floating-point linear-interpolation lerp

9
推荐指数
1
解决办法
782
查看次数

Matlab interp1函数的C实现(线性插值)

你知道Matlab interp1函数的任何C实现(只是'线性'函数)吗?我认识一个Java.

c matlab linear-interpolation

8
推荐指数
4
解决办法
2万
查看次数

如何通过R中的线性插值来找到点

我有两个点(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)

r linear-interpolation

8
推荐指数
1
解决办法
4913
查看次数

SQL Server视图:如何使用插值添加缺失的行

遇到问题.

我有一个表定义为保持每日国债收益率曲线的值.

这是一个非常简单的表,用于历史查找值.

有notibly在今年的表中的一些差距4,6,8,9,11-1921-29.

该公式是在非常简单的计算年4它的0.5*Year3Value + 0.5*Year5Value.

问题是如何编写VIEW可以返回缺失年份的文件?

我可以在存储过程中完成它,但最终结果需要是一个视图.

sql sql-server sql-view linear-interpolation

7
推荐指数
1
解决办法
2712
查看次数

具有特定输出时间的时间序列数据的插值

我有数据库和时间数据.我想将数据插入特定的时间步长.

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)

r linear-interpolation zoo

7
推荐指数
1
解决办法
2983
查看次数

R:按组插入 NA

我想在数据帧的变量中执行线性插值,其中考虑到: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来插入NAindividual==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)

我试过使用这些包zoodplyr

library(dplyr)
library(zoo)
proof <- df %>%
  group_by(Individuals) %>%
  na.approx(df$Value)
Run Code Online (Sandbox Code Playgroud)

但我不能 …

group-by r linear-interpolation zoo dplyr

7
推荐指数
2
解决办法
5007
查看次数

用 R 对不规则时间序列进行插值

在 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)

有什么想法如何(有效)处理这个问题吗?感谢您的支持!

r time-series linear-interpolation tidyverse tidyverts

7
推荐指数
2
解决办法
2148
查看次数