2014-09-11 9 views
0

У меня есть матрица A, и я хотел бы заполнить NaN в каждом столбце до точки, где встречается числовое значение.заполнение NaNs на основе минимального числового значения

Пример

A = 
    [ 0 0 0 
     0 0 6 
     5 7 0] 

должна быть

A = 
    [NaN NaN NaN 
     NaN NaN 6 
     5 7 0] 

Есть ли способ векторизации этой проблемы, а не делать это в два для петли шага

Спасибо за вашу помощь!

+0

ли Возможное, что столбец содержит все нули? Что делать? –

ответ

5

Использование max найти первый ненулевой (если таковые имеются) в каждом столбце, а затем bsxfun, чтобы создать маску для значений, которые должны быть установлены в NaN:

[valid, row] = max(A~=0); 
row(~valid) = size(A,1)+1; %// in case some column contains all zeros 
A(bsxfun(@lt, (1:size(A,1)).', row)) = NaN; 
+0

Великолепное спасибо, что именно я хотел – qfd

+3

@hdg не забудьте принять ответ, если он решил вашу проблему. –

+1

Умное решение! И лучше всего, что он использует 'bsxfun'! – Divakar

Смежные вопросы