我有一个如下数据集:
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如何为我解决这个问题?
答案 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))