в MATLAB я хочу вставить значение на полпути между каждым элементом в векторе
Например
v=[1,3,5,7,9]
я хочу получить
v=[1,2,3,4,5,6,7,8,9]
есть ли быстрый способ сделать это?
в MATLAB я хочу вставить значение на полпути между каждым элементом в векторе
Например
v=[1,3,5,7,9]
я хочу получить
v=[1,2,3,4,5,6,7,8,9]
есть ли быстрый способ сделать это?
Очень простой общий способ сделать это — использовать интерполяцию, в частности функцию INTERP1:
>> v = [1 3 5 7 9]
v =
1 3 5 7 9
>> v = interp1(v,1:0.5:numel(v))
v =
1 2 3 4 5 6 7 8 9
Поскольку вы просто хотите, чтобы было вставлено среднее значение каждых двух значений, вы можете сделать следующее:
v = [1 3 5 7 9];
W = zeros(1,2*numel(v)-1);
W(1:2:end) = v;
W(2:2:end-1) = (W(1:2:end-2) + W(3:2:end))/2
Если вам нужно что-то еще, взгляните на interp1, который позволит для более продвинутой интерполяции.
если diff(v) является константой, как в вашем примере [1 3 5 7 9], вы можете сделать это так:
>> v=[1 3 5 7 9]
v =
1 3 5 7 9
>> w=linspace(v(1),v(length(v)),2*length(v)-1)
w =
1 2 3 4 5 6 7 8 9
как говорится в официальном справочном документе:
y = linspace(x1,x2,n) generates n points. The spacing between the points is (x2-x1)/(n-1).
Если diff(v) не является константой, например v=[1 3 6 8 10], вы можете сначала вычислить разницу, используя
dv=diff(v)
тогда вы можете иметь w
w=ones(1,2*length(v)-1) %initialize
w(1:2:length(w))=v; % odd element
w(2:2:length(w)-1)=v(1:length(v)-1)+diff(v)*0.5 %even element