Voglio trovare e azzerare i picchi in un vettore con la larghezza più breve, ovvero picchi che hanno un singolo campione diverso da zero ei campioni vicini zero, ovvero [0 ~0 0]
con ~0
è il picco. Esempio: se x = [1 0 2 0 0 3 0 4 5 6 0 7 0 8]
, quindi voglio trovare il 2, 3 e 7 e renderli 0, cioè x
diventa [1 0 0 0 0 0 0 4 5 6 0 0 0 8]
. Il seguente codice fa il trucco, ma esiste un modo più efficiente o migliore per farlo, oppure esiste una funzione Matlab che trova un determinato pattern in un vettore (o anche in una matrice)?Metodo efficiente per trovare un valore circondato da zeri in un vettore
% remove peaks of shape [0 ~0 0]
k = find(x);
for j=k'
if j==numel(x) || j==1
elseif ~x(j-1) && ~x(j+1)
x(j) = 0;
end
end
'X' può contenere sia numeri positivi che negativi? – Dan
Per completezza, è possibile aggiungere anche l'output previsto relativo all'input di esempio. Altrimenti un ottimo [mcve] (http://stackoverflow.com/help/mcve) – kkuilla