【问题标题】:Interpolation: replace zeros with intermediate values插值:用中间值替换零
【发布时间】:2018-06-28 06:37:58
【问题描述】:

我在 MATLAB 中有一个数组

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

数据以大约九或十的间隔具有非零值,所有其他值均为零。

如何用一些插值替换零?我不想要阶梯式数据。

例如:

% 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]

【问题讨论】:

  • 请不要发布代码或数据的图像,使用可用的代码格式更清晰,更容易被他人复制,并且通常更简洁。我已经在这里为你整理了格式。

标签: matlab interpolation


【解决方案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,这可以在一行中完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 2012-07-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多