Tôi muốn tìm và không đỉnh trong một vectơ có chiều rộng ngắn nhất, tức là các đỉnh có một mẫu đơn không khác và các mẫu lân cận bằng không, tức là [0 ~0 0]
~0
là đỉnh cao. Ví dụ: nếu x = [1 0 2 0 0 3 0 4 5 6 0 7 0 8]
, thì tôi muốn tìm 2, 3 và 7 và đặt chúng là 0, tức là x
trở thành [1 0 0 0 0 0 0 4 5 6 0 0 0 8]
. Đoạn mã sau thực hiện thủ thuật, nhưng có cách nào hiệu quả hơn hay tốt hơn để thực hiện điều này, hay một hàm Matlab tồn tại mà tìm thấy một mẫu nhất định trong một vectơ (hay thậm chí là ma trận)?Phương pháp hiệu quả để tìm một giá trị được bao quanh bởi các số 0 trong một vector
% 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' có thể chứa cả số dương và số âm? – Dan
Để có đầy đủ, bạn cũng có thể thêm đầu ra dự kiến có liên quan đến đầu vào ví dụ của bạn. Nếu không thì [mcve] rất tốt (http://stackoverflow.com/help/mcve) – kkuilla