2013-08-15 3 views
0

У меня есть два векторапроверить сосед ячейки в векторе Matlab

K=[1 1 1 2 1 2 1 4 2 10 4 5 1] 

и

L=[2 0 1 2 1 2 1 3 2 0 1 2 1] 

Я хочу, чтобы сравнить стоимость 7-го элемента в каждом векторе с соседями этого значение, где соседи составляют 5 элементов рядом с этим элементом в каждой стороне. Так что для K 7-й элемент равен 1, а соседи - 1 1 1 2 1 2 (левые соседи) и 4 2 10 4 5 1 (правые соседи).

Для L, 7-й элемент 1 и соседи 2 0 1 2 1 2 (левые соседи) и 3 2 0 1 2 1 (правые соседи). Если разница между 7-м значением и каждым из его соседей выше определенного порога, я сделаю что-то, например, X = 1, если нет, тогда я сделаю еще одну вещь, например X=2.

В моем примере я установил порог в 3, поэтому для K значение 7-го элемента равно 1, а разница между ним и двумя его соседями 10,5 больше порогового значения 3, поэтому X будет 1. Для L значение 5-го элемента равно 1, а разница между ним и всеми его соседями меньше порогового значения 3, поэтому X будет равно 2. Поэтому мне интересно, может ли кто-нибудь помочь мне сделать это условие, m не уверен, что это можно сделать без циклов, чтобы сэкономить время.

+0

для 5-го элемента в векторе есть только 4 элемента с одной стороны (от 1 до 4) ... – bla

+0

Вот почему я попытался отредактировать свой пост до 7-го элемента вместо 5-го, но по какой-то причине редактирование не было принято. Это действительно похоже на 7-е место. – CTZStef

+0

Спасибо, я обновил его. – Tak

ответ

1

Вы можете проверить это состояние, используя any и or:

N = 5; % reference index 
T = 3; % threshold 

V = L; % used to pass the vector L to the if-statement 
% V = K; 

% formulate if-statement to check for values 
% below/above index N and check if any difference 
% exceeds the threshold 
% the or-statement (because it does not matter if the 
% threshold is exceeded above index N or below) 
% is expressed as | 

if any((V(1:N-1)-V(N))>T) | any((V(N+1:end)-V(N))>T) 
    X = 1; 
else 
    X = 2; 
end 

Примечание
В зависимости от вашей версии Matlab V(1:N-1)-V(N) не будет работать, потому что размеры матрицы не согласны. В этом случае используйте: V(1:N-1)-ones(size(V(1:N-1))).*V(N)

+0

Спасибо за ваш ответ! Мне просто интересно, хочу ли я проигнорировать результат, если разница между значением и его соседями была выше 'T', только если сосед не был равен нулю. Так, например, если 'T = 3' и' K = [1 1 1 2 1 2 10 4 2 10 0 5 1] ', то' X = 1', потому что есть несколько элементов с diff. больше, чем 'T' с 11-м элементом'0', но если' K = [8 7 8 9 7 7 10 7 7 8 0 9 8] ', то' X = 1', хотя diff. между ним и 11-м элементом является '> T', но это потому, что 11-й элемент равен нулю'0'. Пожалуйста, дайте мне знать, если вам нужно больше разъяснений. Заранее спасибо – Tak

+0

Мне было интересно, если у меня есть возможность проверить мой предыдущий комментарий, я также опубликовал новый вопрос относительно этого, который можно найти здесь http://stackoverflow.com/questions/18287703/check-if-the- разница между ними-на-соседями-в-а-клетки-в-вектором-выше-а-Тр – Tak

Смежные вопросы