in MATLAB desidero inserire un valore a metà strada tra ogni elemento nel vettoreMATLAB valore inserto tra
ad esempio
v=[1,3,5,7,9]
voglio ottenere
v=[1,2,3,4,5,6,7,8,9]
c'è un modo veloce per farlo?
in MATLAB desidero inserire un valore a metà strada tra ogni elemento nel vettoreMATLAB valore inserto tra
ad esempio
v=[1,3,5,7,9]
voglio ottenere
v=[1,2,3,4,5,6,7,8,9]
c'è un modo veloce per farlo?
a = [1 3 5 7 9];
b = [2 4 6 8];
c = zeros(9,1);
c(1:2:9) = a; c(2:2:8) = b;
Dal momento che si desidera solo da inserire la media di ogni due valori, si potrebbe procedere come segue:
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
Se si desidera qualcosa di diverso, dare un'occhiata a interp1, che consentirà di interpolazione più avanzato .
Una molto semplice, modo generale per farlo è con interpolazione, in particolare la funzione 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
se diff (v) è una costante, come la vostra esempio [1 3 5 7 9 ], si può fare in questo modo:
>> 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
come il doc Guida ufficiale dice:
y = linspace(x1,x2,n) generates n points. The spacing between the points is (x2-x1)/(n-1).
Se diff (v) non è una costante, come v = [1 3 6 8 10], è possibile prima di calcolare l'uso differenza
dv=diff(v)
allora si può avere 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
che era solo un esempio non sai quali due vettori ha. –
@ d'o-o'b: non è chiaro dalla domanda, non viene menzionato nessun secondo vettore o quali dovrebbero essere i valori. Da "metà tra ogni elemento" ho pensato che voleva inserire il valore tra entrambi gli elementi, per avere un valore a metà tra i valori. – Egon