Matlab - contar solo los 1 de un vector

 
Vista:
sin imagen de perfil

contar solo los 1 de un vector

Publicado por Maria (12 intervenciones) el 23/05/2017 12:34:16
Hola buenos días!

Tengo la siguiente duda:

estoy haciendo un programa para contar los días seguidos que se producen precipitaciones. Así que, lo primero que hice fue lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%%%%%%%%%%%%%% CONTAR NÚMERO DÍAS CUMPLEN CONDICIÓN%%%%%%
 
kk_mes=find(Pr<1); %Siendo  Pr la precipitación 
proba=diff(kk_mes);% con la función diff encuentro los días seguidos
 
 
%%%Este bucle que viene a continuación sirve para hacer cero calquier valor que sea mayor que 1
%%%es decir, los que no son seguidos, así obtenemos un proba2 que solo ten 0 o 1
 
 
[nc nf]=size(proba);
for i=1:nc
    xxx=proba(i);
    if xxx>1
        proba2(i)=0;
    else
        proba2(i)=1;
    end
end

el problema que tengo ahora es que quiero sumar los 1 que van seguidos para después calcular el máximo de días seguidos con precipitación y no se como hacerlo.
gracias de antemano.
Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

contar solo los 1 de un vector

Publicado por bidi (9 intervenciones) el 23/05/2017 12:47:47
Lo que deberias de hacer seria un bucle en el que:
- Si es 1, incrementas la variable de dias_seguidos_lloviendo, en la posicion ki
- Si no es 1, incrementas en uno la posición ki, salvo que acabes de entrar en esta opción

Buscas el máximo del vector anterior y ya lo tienes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

contar solo los 1 de un vector

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/05/2017 17:24:02
¿Deseas hacer esto?. A cierto nivel tu pregunta no es tan clara. ¿que signfica: "días seguidos")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
clear all
clc
Pr=1.5*rand(1,15)
kk_mes=find(Pr<1) %Siendo  Pr la precipitación 
proba=diff(kk_mes) % con la función diff encuentro los días seguidos 
%%%Este bucle que viene a continuación sirve para hacer cero calquier valor que sea mayor que 1
%%%es decir, los que no son seguidos, así obtenemos un proba2 que solo ten 0 o 1
 
[nc, nf]=size(proba);
for i=1:nf
    xxx=proba(i);
    if xxx>1
        proba2(i)=0;
    else
        proba2(i)=1;
    end
 
end
proba2
dias=sum(proba2)


1
2
3
4
5
6
7
8
9
10
11
>> precipitaciones2
Pr =
    0.4289    0.8155    1.4772    1.0735    1.2585    0.6499    0.7059    0.8411    0.4036    1.1235    0.7558    0.9702    0.4616    0.2081    0.7134
kk_mes =
     1     2     6     7     8     9    11    12    13    14    15
proba =
     1     4     1     1     1     2     1     1     1     1
proba2 =
     1     0     1     1     1     0     1     1     1
dias =
     7

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

contar solo los 1 de un vector

Publicado por David (1094 intervenciones) el 23/05/2017 22:31:09
Hola Maria;

Entiendo lo que deseas hacer, en alguna oportunidad hice un análisis similar para analizar la persistencia del viento en el transcurso del tiempo.

A continuación te dejo un ejemplo de como podrías trabajar tus datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
clear all,close all,clc
 
prec = round(1.3*rand(100,1));
 
 
nd = length(prec);
n = 0;
for nc= 1:nd
if nc ==1
    if prec(nc)== 1
 
      n = n +1;
      cuenta(nc) = n;
    else
        n = 0;
        cuenta(nc) = n;
    end
 
else
 
    if and(prec(nc)== 1 ,prec(nc-1)==1)
 
      n = n +1;
      cuenta(nc) = n;
    else
        n = 0;
        cuenta(nc) = n;
    end
 
end
end
 
%%
subplot(211)
plot(prec,'o-')
ylabel('Precipitación ')
 
subplot(212)
stem(cuenta)
ylabel('Días de precipitación')

Analisis_precipitacion

Espero que sea de alguna ayuda.

Saludos
David Correa Ch.
[email protected]
[email protected]
Servicios de Programación Matlab
http://fismatlab.org​​
http://fismatlab.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

contar solo los 1 de un vector

Publicado por Maria (12 intervenciones) el 24/05/2017 10:38:46
Me ha sido de mucha ayuda gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar