How to Convert vector elements to zero for certain N length when its values gets negative?
Show older comments
I have a column vector F= (0; 0; 0; 0; 5; 7; 12; 11; 23; 32; 22; 10; 8; -6 0; -8; 1; 4; 8; -5; 0; 0; 0; 6; 8; 9; 13; 14; 12; 23; 34; 22; 16; 17; 4; -5 ; -6; 5; 7; 0; 0; 0)
I want to convert values of F when it gets negative (in this case -6 and -5) till N (lets N=8)
so result would be F= (0; 0; 0; 0; 5; 7; 12; 11; 23; 32; 22; 10; 8; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 6; 8; 9; 13; 14; 12; 23; 34; 22; 16; 17; 4; 0; 0; 0; 0; 0; 0; 0) how to do this?
Accepted Answer
More Answers (3)
while ~isempty(find(F<0))
id1 = find(F<0,1);
id2 = min(id1 + 7, length(F));
F(id1:id2) = 0;
end
2 Comments
Sagar Dhage
on 6 Aug 2014
Yu Jiang
on 6 Aug 2014
How about this?
while ~isempty(find(F<0))
id1 = find(F<0,1);
id2 = min(id1 + 7, length(F));
F(id1:id2) = 0;
end
Roger Stafford
on 6 Aug 2014
I am not sure what you mean in your remark "till N (lets N=8)". Do you mean that a maximum of N successive negative values in F are to be converted to 0 with all the possible remaining negative values, if any, unaffected? If so, the example you should have used ought to have demonstrated that behavior. In any case, here is code that would accomplish such a task:
F(find(F<0,N)) = 0;
1 Comment
Sagar Dhage
on 6 Aug 2014
Roger Stafford
on 6 Aug 2014
I think I understand you now. How about this:
n = length(F);
for k = 1:n
if F(k) < 0
F(k:min(k+N-1,n)) = 0;
end
end
1 Comment
Sagar Dhage
on 7 Aug 2014
Categories
Find more on Data Type Conversion in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!