Матлаб Тримминг на границах - PullRequest
0 голосов
/ 07 декабря 2011

у меня есть матрица А:

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

Мне было интересно, есть ли способ определить, когда NaN впервые поворачиваются к числам и поворачивают первые 2 точки на NaN, такие как 10 & 1, оба на NaN.

Затем найдите, когда числа обращаются к NaN и поверните последние две цифры, 3 и 49 к NaN.

Изначально я думал об использовании следующего, но мне было интересно, был ли это лучший способ:

i= 2;
while i < 1440
    if isnan(A(i)) < isnan(A(i-1))     //Transitioning from NaN to numbers
        A(i:i+2) = NaN;
        i = i+ 4;
    elseif isnan(A(i)) > isnan(A(i-1))   //Transitioning from numbers to NaNs 
        A(i-2:i) = NaN;
        i = i + 1;
    else
        i = i + 1;
    end
end

но было интересно, есть ли другой способ, которым я мог бы оптимизировать его?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2011

Сначала я предполагаю, что ваш вектор A организован с NaN в начале и в конце и непрерывным набором чисел в середине, как в

A = [NaN ... NaN, contiguous numeric data, NaN ... NaN]

Во-первых, я предлагаю найти числовые данные и работать оттуда, как, например,

flagNumeric = ~isnan(A);

Теперь flagNumeric будет true для числовых записей и false для NaN's .

Итак, первая цифра будет в

firstIndex = find(flagNumeric,1,'first');

и последний номер в

 lastIndex = find(flagNumeric,1,'last');

Затем вы можете использовать firstIndex и lastIndex , чтобы изменить первые и последние числовые данные на NaN

 A(firstIndex:firstIndex+1) = NaN;
 A(lastIndex-1:lastIndex) = NaN;
1 голос
/ 10 декабря 2011

Вот немного более простая версия, основанная на том же предположении, что и ответ Азима:

nums = find(~isnan(A));
A( nums([1 2 end-1 end]) ) = NaN;
1 голос
/ 07 декабря 2011
% Set the first two non-NaN numbers to NaN
first = find(isfinite(A), 1, 'first');
A(first:first+1) = NaN;

% Set the last two non-NaN numbers to NaN
last = find(isfinite(A), 1, 'last');
A(last-1:last) = NaN;

Конечно, вышеприведенный код будет нарушен в особых случаях (например, когда last == 1), но их следует отфильтровать просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...