将每个相邻值的平均值插入原始矢量中

时间:2014-04-08 14:41:32

标签: arrays matlab interpolation

我有一个向量,我想在MATLAB中“填充”它,这样得到的向量是长度的两倍,额外的数据是原始相邻值的平均值。

例如

a = [1:10]

b = a的函数,其中b现在大小为20

b = 0.5 1 1.5 2 2.5 3 3.5....... 9.5 10

3 个答案:

答案 0 :(得分:4)

您可以使用插值在一行中执行此操作(请注意,第一个数字是NaN,因为它确实没有定义):

interp1(2:2:length(a)*2, a, 1:length(a)*2)

我们的想法是均匀分布x个值(即2,4,6 ......),以便您可以使用单个xi个值{(1,2,3,4)。因此,它们正好在每个x值之间。然后y点的线性插值将是它们的手段。如果你不喜欢我留在前面的那个NaN,主要是为了说明它是未定义的,你可以使用'extrap'中的interp1标志,或者(更好的imo)启动你的{{ 1}}来自xi

2

interp1(2:2:length(a)*2, a, 1:length(a)*2, 'linear', 'extrap')

否则这是一个简单的矢量化方法:

interp1(2:2:length(a)*2, a, 2:length(a)*2)

答案 1 :(得分:2)

最简单的方法是使用linspace指定您希望使用interp1进行插值(和推断)的位置:

>> a = 1:10;
>> b = interp1(a,linspace(0.5,numel(a),2*numel(a)),'linear','extrap')
b =
  Columns 1 through 8
    0.5000    1.0000    1.5000    2.0000    2.5000    3.0000    3.5000    4.0000
  Columns 9 through 16
    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000    7.5000    8.0000
  Columns 17 through 20
    8.5000    9.0000    9.5000   10.0000

使用'linear'作为方法可以得到相邻值的平均值,'extrap'表示执行外推(因此b(1)不会出现NaN,而是0.5)。

答案 2 :(得分:1)

看起来你正在假设" zeroth" entry为零,以便获得与原始向量的长度相同的均值。你可以使用

a2 = filter([0.5,0.5],1,a);

获取均值向量,其中第一个条目的平均值为0,第一个条目为a。然后,你可以做任何你喜欢的事情来交错这两个向量,例如,

b = zeros(2*max(size(a)),1);
b(1:2:end) = a2;
b(2:2:end) = a;

filter是一个很棒的命令,尤其适用于计算原始数据向量上的离散卷积(您的相邻方法是一个非常简单的卷积示例)。它也可以逐行或逐列地处理矩阵。