Matlab — массив обрезки на основе второго столбца

#arrays #matlab

Вопрос:

У меня есть массивы с двумя столбцами данных. Второй столбец будет начинаться и заканчиваться неизвестным количеством нулей, и я хочу вырезать эти строки из своего массива, оставив только ненулевые члены. (Для ясности я хочу удалить как нуль, так и данные в первом столбце).

Как мне это сделать?

Спасибо

Ответ №1:

Скажи, что у тебя есть

 a = [1 0
     2 0
     3 1
     4 6
     5 0
     6 9
     7 0
     8 0];
 

Вы можете найти первый и последний ненулевые элементы (из 2-го столбца) с

 idx = a(:,2) ~= 0;
first = find(idx,1);    
last  = find(idx,1,'last');
 

Затем удалите строки до и после

 b = a(first:last,:);
 

В этом примере ноль в середине остается нетронутым обрезкой (в отличие от того, если бы мы это сделали b = a(a(:,2)~=0,:) ), и вы получаете

 b = [3 1
     4 6
     5 0
     6 9]