使用常量值填充数据集中的缺失数据

时间:2015-04-16 11:33:38

标签: arrays matlab constants

我有一个如下数据集:

x= [1, 4, 10]
y= [10, 20, 30]

(x和y是价值对,即(1,10),(4,20),(10,30))

我想填充x值间隙并为y设置常量值,直到下一个已知值对来。这应该在每个值对之间进行,即在(1,10)和(4,20)之间,然后再次介于(4,20)和(10,30)之间。

输入:

x=[1, 4, 10];
y=[10, 20, 30];

输出:

xi= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
yi= [10,10, 10, 20, 20, 20, 20, 20, 20, 30];

Matlab如何为我解决这个问题?

2 个答案:

答案 0 :(得分:2)

假设x中元素的升序排列,这可能是基于diff&的一种方法。 cumsum -

%// Sample inputs
x=[1, 4, 10]
y=[-2, 5, -3]

xi = min(x):max(x)
yi = zeros(1,numel(xi))
yi(x) = diff([0 y])
yi = cumsum(yi)

示例运行 -

x =
     1     4    10
y =
    -2     5    -3
xi =
     1     2     3     4     5     6     7     8     9    10
yi =
    -2    -2    -2     5     5     5     5     5     5    -3

获取yi

习惯 bsxfun解决方案 -

lens = [diff(x) 1];
yi = nonzeros(bsxfun(@times,bsxfun(@ge,lens,[1:max(lens)]'),y)).'

答案 1 :(得分:0)

假设x始终以1开头并以xi的最终长度结束,这将起作用:

xi=1:x(end)
yi=y(arrayfun(@(xi)find(x<=xi,1,'last'),xi))