Borrar filtros
Borrar filtros

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

1 visualización (últimos 30 días)
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?

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 6 de Ag. de 2014
F(F<0 & F>=-8)=0
  3 comentarios
Azzi Abdelmalek
Azzi Abdelmalek el 6 de Ag. de 2014
Editada: Azzi Abdelmalek el 6 de Ag. de 2014
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

Iniciar sesión para comentar.

Más respuestas (3)

Yu Jiang
Yu Jiang el 6 de Ag. de 2014
Editada: Yu Jiang el 6 de Ag. de 2014
while ~isempty(find(F<0))
id1 = find(F<0,1);
id2 = min(id1 + 7, length(F));
F(id1:id2) = 0;
end
  2 comentarios
Yu Jiang
Yu Jiang el 6 de Ag. de 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

Iniciar sesión para comentar.


Roger Stafford
Roger Stafford el 6 de Ag. de 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 comentario
Sagar Dhage
Sagar Dhage el 6 de Ag. de 2014
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.

Iniciar sesión para comentar.


Roger Stafford
Roger Stafford el 6 de Ag. de 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

Community Treasure Hunt

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

Start Hunting!

Translated by