Trim only edge NaN values
3 visualizaciones (últimos 30 dÃas)
Mostrar comentarios más antiguos
Adib Yusof
el 11 de En. de 2021
Comentada: Adib Yusof
el 12 de En. de 2021
Say I have a variable:
X = [NaN, NaN, 2, 5, 1, 6, NaN, 1, NaN NaN];
I need to remove/trim NaNs only when they occur at the edges, either at the beginning or the end, so X would be:
X = [2, 5, 1, 6, NaN, 1];
where the NaN occurring at the middle was untouched. I wrote some codes that work, but I think the codes could be much simpler (I tend to overcomplicate my codes 😅). Please suggest a simpler way to do this. Thanks!
NaNGroups = regionprops(isnan(X), 'Area').Area;
if isnan(X(1))
X(1:NaNGroups(1)) = [];
end
if isnan(X(end))
X(end-NaNGroups(end)+1:end) = [];
end
0 comentarios
Respuesta aceptada
KSSV
el 11 de En. de 2021
X = [NaN, NaN, 2, 5, 1, 6, NaN, 1, NaN, NaN];
A = isnan(X) ;
idx = find(A & diff([0 A]) == 1 & diff([A 0]) == 0) ;
idx = [idx(1) idx(1)+1 idx(end) idx(end)+1] ;
X(idx) =[]
Also you can use:
find(isnan(X),2,'first')
find(isnan(X),2,'last')
Más respuestas (0)
Ver también
CategorÃas
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!