MATLAB — Как найти последнюю строку в столбце со значением больше нуля (или перед последовательностью NAN)?

#matlab #loops #matrix #find #row

#matlab #циклы #матрица #Найти #строка

Вопрос:

У меня есть столбцы значений, которые уменьшаются до ~ 1, после чего все остальные значения являются NaN. Например:

 10    10
8     9
6     8
5     7
3     5
1     2
NaN   1
NaN   NaN
  

Мне нужен номер строки каждого столбца непосредственно перед последовательностью NAN или последнее положительное целое число в последовательности. Строка 6 и строка 7 в приведенном выше примере.

Хотя цикл, вероятно, можно использовать для поиска нужной строки каждого столбца, я не могу определить правильную команду для поиска этой строки. Я find 'last' безуспешно пытался использовать. Пожалуйста, посоветуйте лучший способ добиться этого. Спасибо.

Комментарии:

1. [R, C] = find(isnan(), 'first')

Ответ №1:

если ваша матрица есть a , вы можете использовать

  sum(isfinite(a))

ans =
     6     7
  

это означает, что для первого столбца это 6-я строка, а для второго столбца это 7-я строка с последними значениями, отличными от NaN.

это альтернативно то же самое: sum(~isnan(a))

Комментарии:

1. Большое спасибо @natan. Как я могу затем изменить эти найденные NAN на нули?

2. если a это ваша матрица, тогда a(isnan(a(:))=0 подойдет.

3. Спасибо. Однако это изменяет все NAN на 0, а не на первый в каждом столбце (т. Е. строки 6 и 7 соответственно).

4. ну, это не было ясно из вопроса. Кроме того, это не так, как работает SO, я предпочитаю, чтобы вы задали новый вопрос и или попытались воспользоваться инструментами, которые я вам показал, чтобы попытаться ответить на это самостоятельно.