How to replace values?
Ältere Kommentare anzeigen
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 Kommentare
Azzi Abdelmalek
am 16 Jul. 2013
This is not clear
Ugur
am 16 Jul. 2013
Cedric
am 16 Jul. 2013
And why not to 0101 and 0107?
the cyclist
am 16 Jul. 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).
Akzeptierte Antwort
Weitere Antworten (1)
Jos (10584)
am 17 Jul. 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 Kommentare
Ugur
am 17 Jul. 2013
Jos (10584)
am 17 Jul. 2013
you should type numel with an lower case L instead of the digit 1 ...
Ugur
am 20 Jul. 2013
Kategorien
Mehr zu Library Development finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!