How to Convert vector elements to zero for certain N length when its values gets negative?

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?

 채택된 답변

F(F<0 & F>=-8)=0

댓글 수: 3

sorry, i think i have not explain well. 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 values after -6 gets converted to 0 from -6 to next N=8 values(in bold font) and same for when and after -5 (in bold font) so result should 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 ]
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]
idx=find(F<0,1)
n=numel(F);
while ~isempty(idx)
F(idx:min(idx+7,n))=0;
idx=find(F'<0,1);
end

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Yu Jiang
Yu Jiang 2014년 8월 6일
편집: Yu Jiang 2014년 8월 6일
while ~isempty(find(F<0))
id1 = find(F<0,1);
id2 = min(id1 + 7, length(F));
F(id1:id2) = 0;
end

댓글 수: 2

i want that 0 from this value till next 8 values....
How about this?
while ~isempty(find(F<0))
id1 = find(F<0,1);
id2 = min(id1 + 7, length(F));
F(id1:id2) = 0;
end

댓글을 달려면 로그인하십시오.

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

N is next 8 values from -6 and -5. I want to convert all positive and negative values to 0 for this N=8 length. that is all values in old should be zero. your formula converts only negative.

댓글을 달려면 로그인하십시오.

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

카테고리

도움말 센터File Exchange에서 Data Type Conversion에 대해 자세히 알아보기

질문:

2014년 8월 6일

댓글:

2014년 8월 7일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by