повторить значение в матрице для совпадающего идентификатора (MATLAB) - PullRequest
1 голос
/ 22 июля 2011

Мне нужна ваша помощь в решении следующей проблемы.Столбец1 показывает группировку по целому числу.Любое значение non-nan в Col2 должно быть вставлено в матрицу для совпадения номера группы (Col1).

mat = [ ...
        1  nan 
        1  0.1
        1  nan
        1  nan
        2  nan
        2  nan
        2  nan
        3  0.5
        4  nan
        4  nan
        4  nan
        5  0.2
        5  nan ] ;

ans = [ ...
        1  0.1 
        1  0.1
        1  0.1
        1  0.1
        2  nan
        2  nan
        2  nan
        3  0.5
        4  nan
        4  nan
        4  nan
        5  0.2
        5  0.2 ] ;

Пожалуйста, порекомендуйте векторизованный подход.Данные огромны и уже запускаются в цикле for.Никогда не будет нескольких значений non-nan (col2) в группе (в мате).Спасибо!

1 Ответ

1 голос
/ 22 июля 2011

Решение, использующее ACCUMARRAY , достигнет вашей цели:

values = accumarray(mat(:,1),mat(:,2),[],@min);
mat(:,2) = values(mat(:,1));

Для удобства я использую здесь функцию MIN , поскольку она будет возвращать не-NaN значение, если оно есть, или NaN, если это все, что есть. Это проще, чем логика, используемая при проверке любых не-1010 * значений с использованием, скажем, функции ISNAN . Вы также можете использовать функцию MAX , поскольку в этом случае она ведет себя так же.

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