連續NaN的元素具有以下矩陣我如何給行替換上述
A = [ 0 0
0 0
1 -1
NaN NaN
NaN NaN
0 0
NaN NaN
NaN NaN]
我要全部更換爲NaN
行與它上面行。對於上面的矩陣,這將是
A = [0 0
0 0
1 -1
1 -1
1 -1
0 0
0 0
0 0]
連續NaN的元素具有以下矩陣我如何給行替換上述
A = [ 0 0
0 0
1 -1
NaN NaN
NaN NaN
0 0
NaN NaN
NaN NaN]
我要全部更換爲NaN
行與它上面行。對於上面的矩陣,這將是
A = [0 0
0 0
1 -1
1 -1
1 -1
0 0
0 0
0 0]
我不知道這是否可以矢量...的簡單的解決方案可能是一個循環:
newRow = [];
nans = isnan(A(:,1));
for ii = 1:size(A,1)
if nans(ii)
%# first row might be NaN -- skip it
if ii==1
continue; end
%# for all other rows:
if isempty(newRow)
newRow = A(ii-1,:); end
A(ii,:) = newRow;
else
newRow = [];
end
end
一個想法是先創建一個壓縮矩陣B
,其不與NaN
包含的行,然後再次擴大該矩陣是相同的長度的與原始矩陣:
mask = any(isnan(A), 2);
B = A(~mask, :);
result = B(cumsum(~mask), :);
多好的解決方案! (編輯:但我剛纔注意到,如果A在第一行有NaN,那麼它不起作用,對吧?不過這很好。) –
@ H.Muster:那是設計:) OP要求用值替換NaN **以上**但第一行沒有上面的值。如果有人提供更清晰的規格,我會考慮如何解決它。 – Mehrwolf
+1:非常優雅!怎麼樣'掩碼= isnan(A(:,1))'?通過'any'節省通行證... –
它確實工作!非常感謝!! –