How to replace values?
Mostrar comentarios más antiguos
How can I replace values? I've a matrix of 3653x337 Let's consider I've
- dates values
- 0101 0
- 0102 0
- 0103 0
- 0104 1
- 0105 0
- 0106 0
- 0107 0 ....
I need a function to find all these "1"'s in my matrix and to replace it for two days before and after I've a "1".
Thanks!
4 comentarios
Azzi Abdelmalek
el 16 de Jul. de 2013
This is not clear
Ugur
el 16 de Jul. de 2013
Cedric
el 16 de Jul. de 2013
And why not to 0101 and 0107?
the cyclist
el 16 de Jul. de 2013
I think he means that if there is a 1 in the second column, put two more 1's before and two more after (all in the second column).
Respuesta aceptada
Más respuestas (1)
Jos (10584)
el 17 de Jul. de 2013
Here's a one-liner:
values = [0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1]
values(max(min(bsxfun(@plus,reshape(find(values==1),[],1),-2:2),numel(values)),1))=1
or in more readable format:
values = [0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1]
oldIndex = find(values==1)
newIndex = bsxfun(@plus, oldIndex(:), -2:2)
newIndex = max(newIndex,1)
newIndex = min(newIndex,numel(values))
values2 = values % work on a copy
values2(newIndex) = 1
Note that you do not need unique numbers for right-hand indexing
B = [0 0 0]
B([2 2 2 2 2 2]) = 1
3 comentarios
Ugur
el 17 de Jul. de 2013
Jos (10584)
el 17 de Jul. de 2013
you should type numel with an lower case L instead of the digit 1 ...
Ugur
el 20 de Jul. de 2013
Categorías
Más información sobre Library Development en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!