как взять значения после определенной точки и отбросить значения до нее, в MATLAB? - PullRequest
2 голосов
/ 23 октября 2010

У меня есть массив, скажем,

A =

     1     2     3
     4     5     6
     7     8     9
     2     3     4
     3     4     5
     1     6     8

Я взял точку из 3-го столбца, скажем, p = 9.

Теперь я хочу новый массив, который дает мне все значенияпосле 9 и отбрасывает значения до 9. Например:

ans =

     7     8     9
     2     3     4
     3     4     5
     1     6     8

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

Ответы [ 3 ]

3 голосов
/ 23 октября 2010

Вот один из способов:

>> p = 9;
>> startrow = find(A(:, 3) == p, 1); % first row where 3rd column entry is p
>> A1 = A(startrow:end, :)

A1 =

     7     8     9
     2     3     4
     3     4     5
     1     6     8

Edit:

Имея несколько записей p в последнем столбце, вы можете изменить способ использования find . Например, если вы хотите начать с последнего p вместо первого, вы можете запустить

>> startrow = find(A(:, 3) == p, 1, 'last'); % last row where 3rd column entry is p

Если вы хотите второе из первого, вам нужно немного больше работы:

>> startrows = find(A(:, 3) == p, 2); % first two rows where 3rd column entry is p
>> startrow = startrows(end); % Just the second row where 3rd column entry is p

Кроме того, вам, вероятно, нужна проверка ошибок, если существует вероятность того, что p никогда не появится в массиве или не появится хотя бы два раза (для последнего примера).

1 голос
/ 23 октября 2010

Если вы знаете, к какому столбцу относится точка, вы можете просто сделать

B = A(n:end,:)

, где n - номер столбца.

0 голосов
/ 23 октября 2010

Другой вариант - удалить строки непосредственно из исходной матрицы:

A(1:startrow-1,:)=[];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...