Интерполяция: заменить нули на промежуточные значения - PullRequest
0 голосов
/ 28 июня 2018

У меня есть массив в 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]

1 Ответ

0 голосов
/ 28 июня 2018

Вот основные шаги для решения этой проблемы:

  • Рассматривайте ваши входные данные как 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.

...