#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, я предпочитаю, чтобы вы задали новый вопрос и или попытались воспользоваться инструментами, которые я вам показал, чтобы попытаться ответить на это самостоятельно.