我在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]
答案 0 :(得分:1)
以下是解决此问题的主要步骤:
y
数据进行插值。 x
数据进行插值。interp1
从非零元素(x
和y
数据)到整个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];
当然,如果您不先声明x
和y
,则可以一行完成。