插值:用中间值替换零

时间:2018-06-28 06:37:59

标签: matlab interpolation

我在MATLAB中有一个数组

a = [0, 0, 0, 0, -0.0104, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0094, ...]

数据的非零值的间隔大约为9或10,所有其他值均为零。

如何用一些插值替换零?我不要步进数据。

例如:

% Data set 
A = [0  0  0  4  0  0  0  8  0  0  0  0 13];
% Desired output
A = [1  2  3  4  5  6  7  8  9 10 11 12 13]

1 个答案:

答案 0 :(得分:1)

以下是解决此问题的主要步骤:

  • 将输入数据视为y数据进行插值。
  • 将每个数据点的索引作为x数据进行插值。
  • 使用interp1从非零元素(xy数据)到整个x轴(1:numel(data))进行线性插值。
  • 使用外推法,以便即使不知道第一个或最后一个输入值,也可以填充初始值。

示例:

% Input
data = [ 0 0 0 4 0 0 0 8 0 0 0 0 13 ];
% Set up x and y values for interpolation
x = find( data ~= 0 );
y = data( x );
% output
data = interp1( x, y, 1:numel(data), 'linear', 'extrap' );
% >> data = [1 2 3 4 5 6 7 8 9 10 11 12 13];

当然,如果您不先声明xy,则可以一行完成。